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

3 modi per scoprire se una colonna è una colonna calcolata in SQL Server

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             |
+---------------+