Obtener la Lista de Columnas Calculadas en la tabla de Base de datos (SQL Server)


¿Alguno de ustedes sabe cómo obtener la lista de columnas calculadas en una tabla de base de datos de SQL Server?

Encontré sys.sp_help tablename devuelve esta información, pero solo en el conjunto de resultados de secord.

Estoy tratando de averiguar si hay una mejor manera de hacer esto. Algo que solo devuelve un único conjunto de resultados.

Cualquier ayuda es muy apreciada, ya que está muy mal documentada.

Gracias, Giammarco

Author: OMG Ponies, 2009-09-27

3 answers

Seguro-compruebe la vista del catálogo del sistema sys.columns:

SELECT * FROM sys.columns
WHERE is_computed = 1

Esto le da todas las columnas calculadas en esta base de datos.

Si los desea para una sola tabla, use esta consulta:

SELECT * FROM sys.columns
WHERE is_computed = 1
AND object_id = OBJECT_ID('YourTableName')

Esto funciona en SQL Server 2005 y versiones posteriores.

ACTUALIZACIÓN: Incluso hay una vista de catálogo del sistema sys.computed_columns que también contiene la definición (expresión) de la columna calculada, por si acaso se necesita algún tiempo: -)

SELECT * FROM sys.computed_columns
WHERE object_id = OBJECT_ID('YourTableName')

Marc

 52
Author: marc_s,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-09-27 18:55:25

Si desea utilizar las vistas INFORMATION_SCHEMA, intente

SELECT 
COLUMNPROPERTY(OBJECT_ID(TABLE_SCHEMA+'.'+TABLE_NAME),COLUMN_NAME,'IsComputed') 
    AS IS_COMPUTED,
*
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME='<Insert Your Table Name Here>'
 23
Author: Dave Poole,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-10-10 20:11:27

Para SQL Server 2000 la sintaxis es:

SELECT * FROM sys.columns
WHERE is_computed = 1

Y el un poco más útil:

SELECT 
    sysobjects.name AS TableName, 
    syscolumns.name AS ColumnName
FROM syscolumns
    INNER JOIN sysobjects
    ON syscolumns.id = sysobjects.id
    AND sysobjects.xtype = 'U' --User Tables
WHERE syscolumns.iscomputed = 1

Salida de muestra:

TableName              ColumnName
=====================  ==========
BrinksShipmentDetails  Total
AdjustmentDetails      Total
SoftCountDropDetails   Total
CloserDetails          Total
OpenerDetails          Total
TransferDetails        Total

(6 row(s) affected)
 8
Author: Ian Boyd,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-06-08 10:06:27