Ответ 1
Что-то вроде этого может работать (непроверено):
SELECT *
FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS TC
WHERE TC.TABLE_NAME = 'MYTABLENAME'
AND TC.CONSTRAINT_TYPE = 'UNIQUE'
Я знаю, как получить столбцы из таблицы, используя следующий оператор SQL:
SELECT COLUMN_NAME
FROM INFORMATION_SCHEMA.COLUMNS
WHERE (TABLE_NAME = 'MYTABLENAME')
Но как я могу просто вернуть то, что имя UNIQUE Key Column?
Что-то вроде этого может работать (непроверено):
SELECT *
FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS TC
WHERE TC.TABLE_NAME = 'MYTABLENAME'
AND TC.CONSTRAINT_TYPE = 'UNIQUE'
select CCU.CONSTRAINT_NAME, CCU.COLUMN_NAME
from INFORMATION_SCHEMA.TABLE_CONSTRAINTS as TC
inner join INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE as CCU
on TC.CONSTRAINT_CATALOG = CCU.CONSTRAINT_CATALOG
and TC.CONSTRAINT_SCHEMA = CCU.CONSTRAINT_SCHEMA
and TC.CONSTRAINT_NAME = CCU.CONSTRAINT_NAME
where TC.CONSTRAINT_CATALOG = 'MyCatalogName'
and TC.CONSTRAINT_SCHEMA = 'MySchemaName'
and TC.TABLE_NAME = 'MyTableName'
and TC.CONSTRAINT_TYPE = 'UNIQUE'
Имейте в виду, что таблица может иметь несколько уникальных ограничений, каждая из которых содержит несколько столбцов. Вам нужно будет применить некоторую дополнительную логику, чтобы выбрать правильный.
UPDATE - на основе других комментариев...
В приведенном выше запросе будут найдены все ограничения UNIQUE
. Тем не менее, он не найдет ограничений PRIMARY KEY
или индексов UNIQUE
, созданных за пределами ограничения UNIQUE
.
Чтобы найти первичный ключ, замените последнюю строку следующим образом:
and TC.CONSTRAINT_TYPE = 'PRIMARY KEY'
Что-то вроде этого:
Select col.name From
sys.objects obj
Join sys.columns col on col.[object_id] = obj.[object_id]
Join sys.index_columns idx_cols on idx_cols.[column_id] = col.[column_id] and idx_cols.[object_id] = col.[object_id]
Join sys.indexes idx on idx_cols.[index_id] = idx.[index_id] and idx.[object_id] = col.[object_id]
where obj.name = 'MYTABLENAME'
and idx.is_unique = 1
Два из них, которые я нашел для работы, следующие: второй был из исходного плаката, но без TC.CONSTRAINT_TYPE = 'UNIQUE'. Это условие не работает
SELECT col.name
FROM sys.objects AS obj INNER JOIN
sys.columns AS col ON col.object_id = obj.object_id INNER JOIN
sys.index_columns AS idx_cols ON idx_cols.column_id = col.column_id AND idx_cols.object_id = col.object_id INNER JOIN
sys.indexes AS idx ON idx_cols.index_id = idx.index_id AND idx.object_id = col.object_id
WHERE (obj.name = 'pluginUsers') AND (idx.is_unique = 1)
а также
SELECT CCU.CONSTRAINT_NAME, CCU.COLUMN_NAME
FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS AS TC INNER JOIN
INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE AS CCU ON TC.CONSTRAINT_CATALOG = CCU.CONSTRAINT_CATALOG AND
TC.CONSTRAINT_SCHEMA = CCU.CONSTRAINT_SCHEMA AND TC.CONSTRAINT_NAME = CCU.CONSTRAINT_NAME
WHERE (TC.TABLE_NAME = 'pluginUsers')
Спасибо всем за ваши сообщения
Не будет DESCRIBE TABLE_NAME; сделать трюк?
SELECT *
FROM mbiis.INFORMATION_SCHEMA.TABLE_CONSTRAINTS
WHERE TABLE_NAME='TABLE_NAME' AND CONSTRAINT_TYPE='UNIQUE';