sql >> Base de Datos >  >> RDS >> Sqlserver

Cómo verificar si una columna calculada está "persistente" en SQL Server

Cuando crea una columna calculada en SQL Server, tiene la opción de marcarla como "persistente". Una columna calculada persistente es aquella que se almacena físicamente en la tabla. Si no especifica que se conserva, el valor de la columna se calculará cada vez que ejecute una consulta en ella.

Puede consultar el sys.computed_columns vista de catálogo del sistema para averiguar si una columna calculada está marcada como persistente.

Ejemplo 1:comprobación de una columna calculada

Aquí hay un ejemplo que ejecuté en mi entorno de prueba. En este caso, estoy revisando una columna calculada llamada TotalValue .

SELECT is_persisted
FROM sys.computed_columns
WHERE name = 'TotalValue';

Resultado:

+----------------+
| is_persisted   |
|----------------|
| 1              |
+----------------+

En este caso la columna es persistió.

En caso de que tenga varias columnas calculadas con el mismo nombre, también puede agregar el nombre de la tabla a WHERE cláusula:

SELECT is_persisted
FROM sys.computed_columns
WHERE name = 'TotalValue'
AND OBJECT_NAME(object_id) = 'Products';

Ejemplo 2:devolver todas las columnas calculadas

En este ejemplo, devuelvo todas las columnas calculadas, junto con su 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              |
+----------+-------------------+----------------+

Ejemplo 3:incluir el esquema

En este ejemplo me uno con el sys.objects vista para incluir el esquema en los 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              |
+----------+----------+-------------------+----------------+