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

Restituisce un elenco di colonne calcolate in SQL Server

In SQL Server sono disponibili un paio di visualizzazioni del catalogo di sistema che consentono di ottenere un elenco di colonne calcolate in un database.

Una di queste viste si chiama sys.computed_columns . L'altro è sys.columns .

La vista sys.computed_columns

Le sys.computed_columns la vista del catalogo di sistema contiene una riga per ogni colonna calcolata nel database. Pertanto, puoi eseguire una semplice query per ottenere un elenco di colonne calcolate.

SELECT 
  OBJECT_NAME(object_id) AS [Parent],
  name AS [Computed Column],
  definition,
  is_persisted
FROM sys.computed_columns;

Risultato:

+----------+-------------------+--------------------------------------+----------------+
| Parent   | Computed Column   | definition                           | is_persisted   |
|----------+-------------------+--------------------------------------+----------------|
| Person   | FullName          | (concat([FirstName],' ',[LastName])) | 0              |
| Products | TotalValue        | ([Quantity]*[Price])                 | 1              |
+----------+-------------------+--------------------------------------+----------------+

La maggior parte delle colonne di questa vista vengono ereditate da sys.columns Visualizza. Ne ho incluso solo una manciata qui.

Uno dei vantaggi di questa visualizzazione su sys.columns , è che restituisce la definizione della colonna calcolata, che può essere utile a seconda della situazione. Include anche is_persisted flag, che indica se la colonna calcolata è persistente o meno. Se la colonna è persistente, il valore calcolato della colonna viene archiviato fisicamente nella tabella. In caso contrario, viene calcolato nel momento in cui esegui la query sulla colonna.

La vista sys.columns

Puoi anche eseguire una query su sys.columns per restituire colonne calcolate. Se lo fai, dovrai filtrare i risultati per includere solo le colonne calcolate. Puoi farlo con un WHERE clausola su is_computed colonna.

Esempio:

SELECT 
  OBJECT_NAME(object_id) as Parent,
  name AS [Computed Column]
FROM sys.columns
WHERE is_computed = 1;

Risultato:

+----------+-------------------+
| Parent   | Computed Column   |
|----------+-------------------|
| Person   | FullName          |
| Products | TotalValue        |
+----------+-------------------+

Questa vista non contiene la definition , is_persisted o il uses_database_collation colonne che sys.computed_columns contiene.