提问者:小点点

如何找出FOREIGN KEY约束引用SQL Server中的表?


我试图删除一张表,但收到以下消息:

msg 3726,级别16,状态1,第3行
无法删除对象“dbo. UserProfile”,因为它被FOREIGN KEY约束引用。
msg 2714,级别16,状态6,第2行
数据库中已经有一个名为“UserProfile”的对象。

我用SQL服务器管理工作室环顾四周,但我找不到约束。我如何找出外键约束?


共3个答案

匿名用户

这是:

SELECT 
   OBJECT_NAME(f.parent_object_id) TableName,
   COL_NAME(fc.parent_object_id,fc.parent_column_id) ColName
FROM 
   sys.foreign_keys AS f
INNER JOIN 
   sys.foreign_key_columns AS fc 
      ON f.OBJECT_ID = fc.constraint_object_id
INNER JOIN 
   sys.tables t 
      ON t.OBJECT_ID = fc.referenced_object_id
WHERE 
   OBJECT_NAME (f.referenced_object_id) = 'YourTableName'

这样,您将获得引用表和列名称。

根据评论建议,编辑为使用sys.tables而不是通用sys.objects。谢谢,marc_s

匿名用户

另一种方法是检查

sp_help 'TableName'

(或者只是突出显示引用的表名并按 Alt F1)

随着时间的推移,我决定完善我的答案。下面是sp_help提供的结果的屏幕截图。A在此示例中使用了AdventureWorksDW2012 DB。那里有很多好的信息,我们正在寻找的信息就在最后——以绿色突出显示:

匿名用户

试试这个

SELECT
  object_name(parent_object_id) ParentTableName,
  object_name(referenced_object_id) RefTableName,
  name 
FROM sys.foreign_keys
WHERE parent_object_id = object_id('Tablename')