Questo articolo presenta tre modi per usare T-SQL per scoprire se una colonna è una colonna calcolata in SQL Server.
Questo è per quando conosci il nome della colonna, ma non sai se si tratta o meno di una colonna calcolata.
La funzione COLUMNPROPERTY()
Il COLUMNPROPERTY()
la funzione restituisce informazioni su una determinata colonna.
Una delle proprietà accettate come argomento da questa funzione è chiamata IsComputed
. Otterrai un 1 se la colonna è calcolata e uno 0 se non lo è.
SELECT COLUMNPROPERTY( OBJECT_ID('dbo.Products'), 'TotalValue', 'IsComputed') AS [Computed Column?];
Risultato:
+--------------------+ | Computed Column? | |--------------------| | 1 | +--------------------+
In questo caso ho controllato per vedere se il TotalValue
column è una colonna calcolata e il risultato è 1
, il che significa che è una colonna calcolata.
La vista del catalogo di sistema sys.computed_columns
Le sys.computed_columns
la vista del catalogo di sistema contiene una riga per ogni colonna calcolata nel database. Puoi quindi interrogare questa vista per vedere se la tua colonna è calcolata.
SELECT is_computed AS [Computed Column?] FROM sys.computed_columns WHERE name = 'TotalValue';
Risultato:
+--------------------+ | Computed Column? | |--------------------| | 1 | +--------------------+
Puoi anche utilizzare questa vista se conosci solo il nome della tabella. Se non conosci il nome della colonna, ma stai semplicemente cercando di scoprire se la tabella contiene una colonna calcolata, potresti fare qualcosa del genere:
SELECT name AS [Computed Column] FROM sys.computed_columns WHERE object_id = OBJECT_ID('dbo.Products');
Risultato:
+-------------------+ | Computed Column | |-------------------| | TotalValue | +-------------------+
In questo caso sapevo che il nome della tabella era Products
, quindi ho usato OBJECT_ID()
per ottenere il suo ID e abbinarlo a object_id
colonna (che è l'ID dell'oggetto a cui appartiene la colonna).
In questi esempi sto restituendo solo una colonna. Come con qualsiasi vista, puoi restituire tutte le colonne che desideri. Una delle colonne di questa vista contiene la definizione della colonna calcolata. Ecco una query che restituisce tutte le colonne.
SELECT * FROM sys.computed_columns WHERE name = 'TotalValue';
Risultato (usando l'output verticale):
object_id | 814625945 name | TotalValue column_id | 5 system_type_id | 60 user_type_id | 60 max_length | 8 precision | 19 scale | 4 collation_name | NULL is_nullable | 1 is_ansi_padded | 0 is_rowguidcol | 0 is_identity | 0 is_filestream | 0 is_replicated | 0 is_non_sql_subscribed | 0 is_merge_published | 0 is_dts_replicated | 0 is_xml_document | 0 xml_collection_id | 0 default_object_id | 0 rule_object_id | 0 definition | ([Quantity]*[Price]) uses_database_collation | 1 is_persisted | 1 is_computed | 1 is_sparse | 0 is_column_set | 0 generated_always_type | 0 generated_always_type_desc | NOT_APPLICABLE encryption_type | NULL encryption_type_desc | NULL encryption_algorithm_name | NULL column_encryption_key_id | NULL column_encryption_key_database_name | NULL is_hidden | 0 is_masked | 0 graph_type | NULL graph_type_desc | NULL
La vista del catalogo di sistema sys.columns
Le sys.computed_columns
view in realtà eredita il suo is_computed
column (e un mucchio di altre colonne) da sys.columns
. Pertanto, puoi anche utilizzare sys.columns
per verificare se una colonna è una colonna calcolata.
SELECT is_computed FROM sys.columns WHERE name = 'TotalValue';
Risultato:
+---------------+ | is_computed | |---------------| | 1 | +---------------+