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

Devolver una lista de columnas calculadas en SQL Server

En SQL Server, hay un par de vistas de catálogo del sistema que le permiten obtener una lista de columnas calculadas en una base de datos.

Una de estas vistas se llama sys.computed_columns . El otro es sys.columns .

La vista sys.computed_columns

El sys.computed_columns La vista de catálogo del sistema contiene una fila para cada columna calculada en la base de datos. Por lo tanto, puede ejecutar una consulta simple para obtener una lista de columnas calculadas.

SELECT 
  OBJECT_NAME(object_id) AS [Parent],
  name AS [Computed Column],
  definition,
  is_persisted
FROM sys.computed_columns;

Resultado:

+----------+-------------------+--------------------------------------+----------------+
| Parent   | Computed Column   | definition                           | is_persisted   |
|----------+-------------------+--------------------------------------+----------------|
| Person   | FullName          | (concat([FirstName],' ',[LastName])) | 0              |
| Products | TotalValue        | ([Quantity]*[Price])                 | 1              |
+----------+-------------------+--------------------------------------+----------------+

La mayoría de las columnas de esta vista se heredan de sys.columns vista. Solo he incluido un puñado aquí.

Uno de los beneficios de esta vista sobre sys.columns , es que devuelve la definición de la columna calculada, que puede ser útil según la situación. También incluye el is_persisted indicador, que le indica si la columna calculada se mantiene o no. Si la columna se conserva, el valor calculado de la columna se almacena físicamente en la tabla. De lo contrario, se calcula en el momento en que consulta la columna.

La vista sys.columns

También puede ejecutar una consulta contra sys.columns para devolver columnas calculadas. Si hace esto, deberá filtrar los resultados para incluir solo las columnas calculadas. Puedes hacer esto con un WHERE cláusula en is_computed columna.

Ejemplo:

SELECT 
  OBJECT_NAME(object_id) as Parent,
  name AS [Computed Column]
FROM sys.columns
WHERE is_computed = 1;

Resultado:

+----------+-------------------+
| Parent   | Computed Column   |
|----------+-------------------|
| Person   | FullName          |
| Products | TotalValue        |
+----------+-------------------+

Esta vista no contiene la definition , is_persisted , o uses_database_collation columnas que sys.computed_columns contiene.