当前位置: 首页 > 知识库问答 >
问题:

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

宋建柏
2023-03-14

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

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

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

共有3个答案

鞠征
2023-03-14

试试这个

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')
荣晨朗
2023-03-14

另一种方法是检查

sp_help 'TableName'

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

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

阎弘
2023-03-14

这是:

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

 类似资料:
  • 问题内容: MS SQL是否使用ON DELETE CASCADE选项限制自引用约束?我有一个具有父子关系的表,PARENT_ID列是ID的外键。使用ON DELETE CASCADE选项创建它会导致错误 “引入FOREIGN KEY约束可能会导致循环或多个级联路径。请指定ON DELETE NO ACTION或ON UPDATE NO ACTION,或修改其他FOREIGN KEY约束。” 我不

  • 问题内容: 假设我有以下表格 所有这些都按预期工作,但是我想添加一个额外的约束,即matrix_param仅可以引用类型为’matrix’的pluginid。所以 应该成功但是 应该失败。 对matrix_params的简单约束不起作用,因为它无法知道插件表中的对应类型是什么。 问题答案: 您可以为此使用CHECK约束。您不能将查询置于CHECK约束中,但可以调用一个函数。因此,我们构建了一个简单

  • 我在Amazon RDS上的mysql DB8.0.20版本中有两个表,它们之间有一个外键。 当我尝试插入第二个表时,我得到一个外键错误,但我确定第一个表中存在该键。 然后我跑: 那么,如果ID存在于表1中,为什么表2不能在外键列中使用它呢?我错过了什么?

  • 问题内容: 我在SQL Server 2008数据库中具有以下表: tblItem ,它具有一个 ItemID 字段; tblGoodItem ,它也有一个ItemID字段,并且有一个指向tblItem的外键; tblBadItem ,它也具有ItemID字段,并且还具有指向tblItem的外键。 一个项目不能同时是好项目和坏项目。它必须是一个或另一个。但是,无论该项目是好是坏,它都必须是一个项目

  • 问题内容: 有没有办法给已经存在的约束命名? 例如 : 在上面的查询中,我没有命名外键约束,因此在创建表之后,我可以为其命名,也可以在不删除列的情况下删除外键约束吗? 问题答案: 是的,您可以像这样重命名约束: 编辑:我忘记了第二个问题。是的,您可以删除约束而不删除列。如果您不知道约束的名称,则可以在表中找到它,如下所示:

  • 问题内容: 我想从表中删除约束。我的查询是: 但我得到一个错误: -您的SQL语法有误;检查与您的MySQL服务器版本相对应的手册,以在第1行的’constraint ‘ 附近使用正确的语法 问题答案: Mysql具有用于删除外键约束的特殊语法: