2010-04-20 53 views
25

我可以用下面的查询很容易得到的唯一约束列表:获取唯一约束的列清单(在TSQL)?

select * from INFORMATION_SCHEMA.TABLE_CONSTRAINTS where CONSTRAINT_TYPE='UNIQUE' 

但是我如何才能使每个唯一约束应用于列的列表?

回答

24

INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE

36

埃德是正确的,列暴露在约束列使用视图,使您的生活更轻松,因为它的krufted SQL。

select TC.Constraint_Name, CC.Column_Name from information_schema.table_constraints TC 
inner join information_schema.constraint_column_usage CC on TC.Constraint_Name = CC.Constraint_Name 
where TC.constraint_type = 'Unique' 
order by TC.Constraint_Name 
+0

我用使用过滤器'constraint_type *** ***我的检查约束=“CHECK''如:***'其中TC.constraint_type =”检查' AND TC.TABLE_NAME ='Roles2016.UsersCRM' AND CC.Column_Name ='State'' *** – Kiquenet 2016-07-07 07:35:37

1
SELECT * 
FROM sys.indexes i 
JOIN sys.index_columns ic ON i.index_id = ic.index_id 
         AND i.object_id = ic.object_id 
WHERE i.is_unique_constraint = 1 
+0

'index_id'列的值在对象或模式中唯一唯一吗? – 2011-06-08 03:03:05

1

只为MySQL用户参考, 同样的事情可以用下面的查询来实现:

要查找表

select * from INFORMATION_SCHEMA.TABLE_CONSTRAINTS where CONSTRAINT_TYPE='UNIQUE' and table_name='db_my_table' 

要找到独特的列中的任何唯一性约束与所有列

select * from INFORMATION_SCHEMA.KEY_COLUMN_USAGE where CONSTRAINT_NAME='cons_name' and TABLE_NAME='db_my_table' 
012列

找到唯一的列清单,所需的视图

select CONSTRAINT_NAME,COLUMN_NAME,TABLE_NAME from INFORMATION_SCHEMA.KEY_COLUMN_USAGE where CONSTRAINT_NAME='cons_name' and TABLE_NAME='db_my_table'