如何找到哪个列对应约束?

时间:2013-07-29 22:33:16

标签: sql-server

我正在使用SQL Server 2008作为Web应用程序。

我有一个对几列有约束的表。运行Web应用程序时,出现数据库错误:

  

违反UNIQUE KEY约束'UQ__Customer__DDDFDD3762E4AA3C'。无法在对象'dbo.Customer'中插入重复键。重复键值是(< NULL>)

我有一种直觉感觉哪一列导致了这个问题。

但是,我可以使用Microsoft SQL Server Management Studio中的任何方法来确定列吗?

3 个答案:

答案 0 :(得分:1)

右键单击表格,然后选择Script table as - > Create to - > New query editor window。这将列出表中的所有约束及其名称。

或者,点击表旁边的+,然后点击约束旁边的+。您的约束应该列在那里。您可以双击进行编辑,也可以像上表中所描述的那样编写脚本。

答案 1 :(得分:1)

select * from
INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE
where CONSTRAINT_NAME = '.....'

编辑:

如果information_schema中没有出现约束,您可以尝试在sys *表中查找它:

select c.name as [column], t.name as [table] 
from sysobjects o 
    inner join syscolumns c on o.id = c.cdefault
    inner join sysobjects t on c.id = t.id
where o.name = 'UQ....'

答案 2 :(得分:1)

尝试这样的事情。它将为您提供所有唯一约束的列表

SELECT TC.CONSTRAINT_CATALOG as [Database],
TC.CONSTRAINT_SCHEMA as [Schema],
TC.TABLE_NAME as [Table],
CCU.COLUMN_NAME as [Column]
FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS TC
INNER JOIN INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE CCU on TC.CONSTRAINT_NAME = CCU.CONSTRAINT_NAME
WHERE TC.CONSTRAINT_TYPE = 'UNIQUE'