Получить список вычисляемых столбцов в таблице базы данных (SQL Server)
Кто-нибудь из вас знает, как получить список вычисляемых столбцов в таблице базы данных SQL Server?
Я обнаружил, что таблица sys.sp_help возвращает эту информацию, но только во втором наборе результатов.
Я пытаюсь выяснить, есть ли лучший способ сделать это. Что-то, что возвращает только один набор результатов.
Ответы
Ответ 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