Список первичных ключевых столбцов
Чтобы перечислить столбцы первичного ключа, я использовал реализацию SQL Server стандарта ANSI Представления информационной схемы , поскольку с ними проще работать: нет необходимости использовать функцию object_name()
для перевода object_id
с понятными человеку именами.
Я использую [INFORMATION_SCHEMA].[KEY_COLUMN_USAGE]
, чтобы перечислить
ограничения на таблицу - как первичные, так и внешние ключи;
[INFORMATION_SCHEMA].CONSTRAINT_COLUMN_USAGE
имеет похожую информацию, но
не хватает ORDINAL_POSITION
.
[INFORMATION_SCHEMA].[TABLE_CONSTRAINTS]
предоставляет дополнительную информацию о
ограничения (наиболее важно CONSTRAINT_TYPE
), но не перечисляются столбцы, к которым применяется ограничение.
Чтобы получить единственный список столбцов, используемых первичным ключом, присоединитесь к приведенному выше.
две таблицы, использующие имя ограничения:
SELECT
tc.TABLE_SCHEMA
,tc.TABLE_NAME
,tc.CONSTRAINT_NAME
,kcu.COLUMN_NAME
,kcu.ORDINAL_POSITION
FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS AS tc
INNER JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE AS kcu
ON kcu.CONSTRAINT_NAME = tc.CONSTRAINT_NAME
WHERE tc.CONSTRAINT_TYPE = 'PRIMARY KEY'
AND tc.TABLE_NAME = @TableName