检查表的列是否具有唯一约束

Dhw*_*ani 4 sql sql-server

我需要一个查询,它可以告诉我表的列是否具有唯一约束。如果没有,我必须添加唯一约束。目前,我正在使用下面的查询来检查表的列是否具有唯一约束:

IF NOT EXISTS (SELECT *
    FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS TC
    WHERE TC.CONSTRAINT_TYPE = 'UNIQUE' AND CONSTRAINT_NAME = 'IX_Product_Users' AND TABLE_NAME = 'Product_Users')
BEGIN
    ALTER TABLE Product_Users
    ADD CONSTRAINT IX_Product_Users UNIQUE (EmpID)
END
GO
Run Code Online (Sandbox Code Playgroud)

也尝试过这一方法,但是它不能检查约束在哪一列上:

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

但是我认为这是错误的方法,因为唯一约束名称可能会有所不同。有什么精确的方法可以做到这一点吗?

小智 6

与其使用约束名称,不如寻找相同的定义。就像是

SELECT * 
FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS tc 
    inner join INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE cu 
        on cu.CONSTRAINT_NAME = tc.CONSTRAINT_NAME 
where 
    tc.CONSTRAINT_TYPE = 'UNIQUE'
    and tc.TABLE_NAME = 'Product_Users'
    and cu.COLUMN_NAME = 'EmpID'
Run Code Online (Sandbox Code Playgroud)