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