Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

3 maneiras de descobrir se uma coluna é uma coluna computada no SQL Server


Este artigo apresenta três maneiras de usar o T-SQL para descobrir se uma coluna é uma coluna computada no SQL Server.

Isso é para quando você sabe o nome da coluna, mas não sabe se é ou não uma coluna computada.


A função COLUMNPROPERTY()


A COLUMNPROPERTY() A função retorna informações sobre uma determinada coluna.

Uma das propriedades aceitas como argumento por esta função é chamada IsComputed . Você obterá 1 se a coluna for calculada e 0 se não for.
SELECT 
  COLUMNPROPERTY(
    OBJECT_ID('dbo.Products'), 
    'TotalValue', 
    'IsComputed') 
    AS [Computed Column?];

Resultado:
+--------------------+
| Computed Column?   |
|--------------------|
| 1                  |
+--------------------+

Nesse caso, verifiquei se o TotalValue column é uma coluna computada e o resultado é 1 , o que significa que é uma coluna computada.

A Exibição do Catálogo do Sistema sys.computed_columns


Os sys.computed_columns a exibição do catálogo do sistema contém uma linha para cada coluna computada no banco de dados. Portanto, você pode consultar essa exibição para ver se sua coluna é computada.
SELECT is_computed AS [Computed Column?]
FROM sys.computed_columns
WHERE name = 'TotalValue';

Resultado:
+--------------------+
| Computed Column?   |
|--------------------|
| 1                  |
+--------------------+

Você também pode usar essa exibição se souber apenas o nome da tabela. Se você não sabe o nome da coluna, mas está simplesmente tentando descobrir se a tabela contém uma coluna computada, você pode fazer algo assim:
SELECT name AS [Computed Column]
FROM sys.computed_columns
WHERE object_id = OBJECT_ID('dbo.Products');

Resultado:
+-------------------+
| Computed Column   |
|-------------------|
| TotalValue        |
+-------------------+

Nesse caso, eu sabia que o nome da tabela era Products , então usei OBJECT_ID() para obter seu ID e combiná-lo com o object_id column (que é o ID do objeto ao qual a coluna pertence).

Nesses exemplos, estou retornando apenas uma coluna. Como em qualquer visualização, você pode retornar quantas colunas desejar. Uma das colunas dessa exibição contém a definição da coluna calculada. Aqui está uma consulta que retorna todas as colunas.
SELECT *
FROM sys.computed_columns
WHERE name = 'TotalValue';

Resultado (usando saída vertical):
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

A Exibição do Catálogo do Sistema sys.columns


Os sys.computed_columns view na verdade herda seu is_computed coluna (e várias outras colunas) de sys.columns . Portanto, você também pode usar sys.columns para verificar se uma coluna é uma coluna computada.
SELECT is_computed
FROM sys.columns
WHERE name = 'TotalValue';

Resultado:
+---------------+
| is_computed   |
|---------------|
| 1             |
+---------------+