我试图删除一张表,但收到以下消息:
msg 3726,级别16,状态1,第3行
无法删除对象“dbo. UserProfile”,因为它被FOREIGN KEY约束引用。
msg 2714,级别16,状态6,第2行
数据库中已经有一个名为“UserProfile”的对象。
我用SQL服务器管理工作室环顾四周,但我找不到约束。我如何找出外键约束?
这是:
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')