Подтвердить что ты не робот

Получить список вычисляемых столбцов в таблице базы данных (SQL Server)

Кто-нибудь из вас знает, как получить список вычисляемых столбцов в таблице базы данных SQL Server?

Я обнаружил, что таблица sys.sp_help возвращает эту информацию, но только во втором наборе результатов.

Я пытаюсь выяснить, есть ли лучший способ сделать это. Что-то, что возвращает только один набор результатов.

4b9b3361

Ответ 1

Проверьте представление системного каталога sys.columns:

SELECT *
FROM sys.columns
WHERE is_computed = 1

Это дает вам все вычисленные столбцы в этой базе данных.

Если вы хотите использовать их только для одной таблицы, используйте этот запрос:

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

Это работает на SQL Server 2005 и выше.

ОБНОВЛЕНИЕ: Существует даже представление системного каталога sys.computed_columns, которое также содержит определение (выражение) вычисляемого столбца - на тот случай, если это может понадобиться через некоторое время.

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

Ответ 2

Если вы хотите использовать представления INFORMATION_SCHEMA, попробуйте

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>'

Ответ 3

Для SQL Server 2000 синтаксис:

SELECT * FROM sys.columns
WHERE is_computed = 1

И немного более полезно:

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

вывод образца:

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

(6 row(s) affected)

Ответ 4

Если у вас есть много таблиц с вычисляемыми столбцами и вы хотите видеть также имена таблиц:

SELECT sys.objects.name, sys.computed_columns.name
from sys.computed_columns 
inner join sys.objects on sys.objects.object_id = sys.computed_columns.object_id
order by sys.objects.name