我正在尝试删除一个表,但收到以下消息:
消息3726,级别16,状态1,第3行
无法删除对象“”dbo.UserProfile“”,因为它被外键约束引用。“”
Msg 2714,Level 16,State 6,Line 2
数据库中已存在名为'UserProfile‘的对象。
我使用SQL Server Management Studio查看了一下,但找不到约束条件。如何找出外键约束?
发布于 2013-07-06 18:08:00
这就是它:
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
发布于 2014-06-02 19:16:33
另一种方法是检查
sp_help 'TableName'
(或者只突出显示引用的TableName并按ALT+F1键)
随着时间的推移,我决定改进我的答案。下面是sp_help
提供的结果的屏幕截图。A在此示例中使用了AdventureWorksDW2012 DB。那里有许多好的信息,我们正在寻找的是在最末端-以绿色突出显示:
发布于 2013-07-06 18:08:24
尝尝这个
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')
https://stackoverflow.com/questions/17501840
复制相似问题