查找约束属于哪个表

时间:2010-05-12 07:58:13

标签: sql-server tsql constraints

我需要找出特定约束属于哪个表(名称)。

有没有人有任何TSQL来实现这个目标?

4 个答案:

答案 0 :(得分:27)

这将找不到sys.indexes

中的索引
SELECT
   OBJECT_NAME(o.parent_object_id)
FROM
   sys.objects o
WHERE
   o.name = 'MyConstraintName' AND o.parent_object_id <> 0

答案 1 :(得分:2)

许多事情都可以被视为一种约束:

主键
外键
独特指数
检查约束
列默认

你的问题有点模糊。你知道约束的名称,类型等吗?

根据您问题中的有限信息。我建议您查看master.sys.sp_helpconstraint存储过程的源代码。

在Sql Server Management Studio中,使用对象资源管理器,导航到:“数据库” - “系统数据库” - “主” - “可编程性” - “存储过程” - “系统存储过程” - “sys.sp_helpconstraint ”。它包含了查询所有各种约束的所有tsql。

答案 2 :(得分:0)

gbn,您的解决方案无法正常工作吗?

SELECT
   OBJECT_NAME(o.parent_object_id)
FROM
   sys.objects o
WHERE
   o.name = 'MyConstraintName' AND o.parent_object_id <> 0

因此,如果“ MyConstraintName”变为“ FK_myConstraint” 然后查询变为

SELECT OBJECT_NAME(o.parent_object_id)
FROM sys.objects o
WHERE o.name = 'MyConstraintName' 
  AND o.parent_object_id <> 0

没有结果

(No column name)

它似乎表明您的“解决方案”必须基于对该架构的许多未陈述的假设。

答案 3 :(得分:0)

SELECT NAME AS ObjectName
    ,schema_name(o.schema_id) AS SchemaName, OBJECT_NAME(o.parent_object_id) as TableName
    ,type
    ,o.type_desc
FROM sys.objects o
WHERE o.is_ms_shipped = 0
    AND o.NAME LIKE '%ConstraintUniqueID%'
ORDER BY o.NAME