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.