Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Restituisce tutte le colonne non calcolate da una tabella in SQL Server

In SQL Server puoi usare sys.columns vista del catalogo di sistema per restituire un elenco di colonne non calcolate da una tabella.

Per "non calcolate", intendo semplicemente colonne che non sono colonne calcolate.

Esempio

Ecco un esempio da dimostrare.

SELECT
  name AS [Column],
  TYPE_NAME(user_type_id) AS [Data Type],
  max_length,
  is_computed
FROM sys.columns
WHERE OBJECT_NAME(object_id) = 'Products'
AND is_computed = 0;

Risultato:

+-------------+-------------+--------------+---------------+
| Column      | Data Type   | max_length   | is_computed   |
|-------------+-------------+--------------+---------------|
| ProductID   | int         | 4            | 0             |
| ProductName | varchar     | 255          | 0             |
| Quantity    | smallint    | 2            | 0             |
| Price       | money       | 8            | 0             |
+-------------+-------------+--------------+---------------+

Il sys.columns view restituisce molte colonne, quindi le ho ristrette qui a solo una manciata.

In questo caso, il nome della tabella è Products . Se non avessi filtrato in base a ciò, otterrei un elenco molto ampio di colonne da tutte le tabelle (comprese le tabelle di sistema), viste, funzioni con valori di tabella, ecc.

Ho incluso is_computed colonna qui solo per poter vedere che queste colonne hanno 0 in quella colonna.

Mi capita di sapere che questa tabella ha una colonna calcolata chiamata TotalValue . Ecco di nuovo la query, ma questa volta restituisce tutte le colonne (incluse le colonne calcolate).

SELECT
  name AS [Column],
  TYPE_NAME(user_type_id) AS [Data Type],
  max_length,
  is_computed
FROM sys.columns
WHERE OBJECT_NAME(object_id) = 'Products';

Risultato:

+-------------+-------------+--------------+---------------+
| Column      | Data Type   | max_length   | is_computed   |
|-------------+-------------+--------------+---------------|
| ProductID   | int         | 4            | 0             |
| ProductName | varchar     | 255          | 0             |
| Quantity    | smallint    | 2            | 0             |
| Price       | money       | 8            | 0             |
| TotalValue  | money       | 8            | 1             |
+-------------+-------------+--------------+---------------+