检查 table 的列是否具有唯一约束
Check if column of a table has unique constraint
我需要一个查询,它可以告诉我 table 的列是否具有唯一约束。如果没有,我必须添加唯一约束。目前我正在使用以下查询来检查 table 的列是否具有唯一约束:
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
也试过这个,但无法检查约束是在哪一列上:
SELECT * FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS
WHERE TABLE_NAME='Product_Users' AND CONSTRAINT_TYPE = 'UNIQUE'
但我认为这是一种错误的方式,因为唯一约束名称可能不同。有什么精确的方法可以做到这一点吗?
不要使用约束名称来查找相同的定义。像
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'
我想建议这个查询:
SELECT tc.CONSTRAINT_NAME, count(*)
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'
group by tc.CONSTRAINT_NAME
having count(*) = 1
该列可以包含在具有多个列的唯一约束中,这样您将获得只有您的列的唯一约束。
我需要一个查询,它可以告诉我 table 的列是否具有唯一约束。如果没有,我必须添加唯一约束。目前我正在使用以下查询来检查 table 的列是否具有唯一约束:
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
也试过这个,但无法检查约束是在哪一列上:
SELECT * FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS
WHERE TABLE_NAME='Product_Users' AND CONSTRAINT_TYPE = 'UNIQUE'
但我认为这是一种错误的方式,因为唯一约束名称可能不同。有什么精确的方法可以做到这一点吗?
不要使用约束名称来查找相同的定义。像
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'
我想建议这个查询:
SELECT tc.CONSTRAINT_NAME, count(*)
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'
group by tc.CONSTRAINT_NAME
having count(*) = 1
该列可以包含在具有多个列的唯一约束中,这样您将获得只有您的列的唯一约束。