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

Come verificare se una colonna calcolata è "persistente" in SQL Server

Quando crei una colonna calcolata in SQL Server, hai la possibilità di contrassegnarla come "persistente". Una colonna calcolata persistente è una colonna fisicamente archiviata nella tabella. Se non specifichi che è persistente, il valore della colonna verrà calcolato ogni volta che esegui una query su di essa.

Puoi interrogare sys.computed_columns vista del catalogo di sistema per scoprire se una colonna calcolata è contrassegnata come persistente.

Esempio 1 – Verifica di una colonna calcolata

Ecco un esempio che ho eseguito nel mio ambiente di test. In questo caso, sto controllando una colonna calcolata chiamata TotalValue .

SELECT is_persisted
FROM sys.computed_columns
WHERE name = 'TotalValue';

Risultato:

+----------------+
| is_persisted   |
|----------------|
| 1              |
+----------------+

In questo caso la colonna è persiste.

Nel caso in cui tu abbia più colonne calcolate con lo stesso nome, puoi anche aggiungere il nome della tabella a WHERE clausola:

SELECT is_persisted
FROM sys.computed_columns
WHERE name = 'TotalValue'
AND OBJECT_NAME(object_id) = 'Products';

Esempio 2 – Restituisci tutte le colonne calcolate

In questo esempio restituisco tutte le colonne calcolate, insieme al loro is_persisted valori.

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

Risultato:

+----------+-------------------+----------------+
| Table    | Computed Column   | is_persisted   |
|----------+-------------------+----------------|
| Person   | FullName          | 0              |
| Products | TotalValue        | 1              |
+----------+-------------------+----------------+

Esempio 3:includi lo schema

In questo esempio mi unisco a sys.objects visualizzare per includere lo schema nei risultati.

SELECT 
  SCHEMA_NAME(o.schema_id) AS [Schema],
  OBJECT_NAME(cc.object_id) AS [Table],
  cc.name AS [Computed Column],
  cc.is_persisted
FROM sys.computed_columns cc
INNER JOIN sys.objects o
ON o.object_id = cc.object_id;

Risultato:

+----------+----------+-------------------+----------------+
| Schema   | Table    | Computed Column   | is_persisted   |
|----------+----------+-------------------+----------------|
| dbo      | Person   | FullName          | 0              |
| dbo      | Products | TotalValue        | 1              |
+----------+----------+-------------------+----------------+