SQL - 如何从表中获取唯一键的列名

eqi*_*qiz 16 sql

我知道如何使用以下SQL语句从表中获取列:

SELECT COLUMN_NAME 
FROM INFORMATION_SCHEMA.COLUMNS 
WHERE (TABLE_NAME = 'MYTABLENAME')
Run Code Online (Sandbox Code Playgroud)

但是,我如何才能返回UNIQUE Key的列名?

Chr*_*ter 17

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'
Run Code Online (Sandbox Code Playgroud)

请记住,表可能有多个唯一约束,每个约束包含多个列.您需要应用一些额外的逻辑来选择正确的逻辑.

更新 - 基于其他评论......

以上查询将查找所有UNIQUE关键约束.但是,它不会找到在键约束之外创建的PRIMARY KEY约束或UNIQUE索引UNIQUE.

要查找主键,请将最后一行替换为:

and TC.CONSTRAINT_TYPE = 'PRIMARY KEY'
Run Code Online (Sandbox Code Playgroud)


Don*_*yrd 7

像这样的东西可能有效(未经测试):

SELECT *
FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS TC
WHERE TC.TABLE_NAME = 'MYTABLENAME'
AND TC.CONSTRAINT_TYPE = 'UNIQUE'
Run Code Online (Sandbox Code Playgroud)