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

Como verificar se uma coluna computada é “persistente” no SQL Server


Ao criar uma coluna computada no SQL Server, você tem a opção de marcá-la como “persistente”. Uma coluna computada persistente é aquela que está fisicamente armazenada na tabela. Se você não especificar que ela é persistente, o valor da coluna será calculado toda vez que você executar uma consulta nela.

Você pode consultar o sys.computed_columns visualização do catálogo do sistema para descobrir se uma coluna computada está marcada como persistente.


Exemplo 1 – Verificando uma coluna computada


Aqui está um exemplo que eu executei no meu ambiente de teste. Nesse caso, estou verificando uma coluna computada chamada TotalValue .
SELECT is_persisted
FROM sys.computed_columns
WHERE name = 'TotalValue';

Resultado:
+----------------+
| is_persisted   |
|----------------|
| 1              |
+----------------+

Neste caso, a coluna é persistiu.

Caso você tenha várias colunas computadas com o mesmo nome, você também pode adicionar o nome da tabela ao WHERE cláusula:
SELECT is_persisted
FROM sys.computed_columns
WHERE name = 'TotalValue'
AND OBJECT_NAME(object_id) = 'Products';

Exemplo 2 – Retornar todas as colunas computadas


Neste exemplo eu retorno todas as colunas computadas, junto com seu is_persisted valores.
SELECT 
  OBJECT_NAME(object_id) AS [Table],
  name AS [Computed Column],
  is_persisted
FROM sys.computed_columns;

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

Exemplo 3 – Incluir o esquema


Neste exemplo eu junto com o sys.objects view para incluir o esquema nos resultados.
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;

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