我试图删除一张表,但收到以下消息:
msg 3726,级别16,状态1,第3行
无法删除对象“dbo. UserProfile”,因为它被FOREIGN KEY约束引用。
msg 2714,级别16,状态6,第2行
数据库中已经有一个名为“UserProfile”的对象。
我用SQL服务器管理工作室环顾四周,但我找不到约束。我如何找出外键约束?
试试这个
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')
另一种方法是检查
sp_help 'TableName'
(或者只是突出显示引用的表名并按 Alt F1)
随着时间的推移,我决定完善我的答案。下面是sp_help
提供的结果的屏幕截图。A在此示例中使用了AdventureWorksDW2012 DB。那里有很多好的信息,我们正在寻找的信息就在最后——以绿色突出显示:
这是:
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的外键。 一个项目不能同时是好项目和坏项目。它必须是一个或另一个。但是,无论该项目是好是坏,它都必须是一个项目
问题内容: 有没有办法给已经存在的约束命名? 例如 : 在上面的查询中,我没有命名外键约束,因此在创建表之后,我可以为其命名,也可以在不删除列的情况下删除外键约束吗? 问题答案: 是的,您可以像这样重命名约束: 编辑:我忘记了第二个问题。是的,您可以删除约束而不删除列。如果您不知道约束的名称,则可以在表中找到它,如下所示:
在进行jOOQ不可知(无代码生成)迁移时,我遇到了一种情况,需要检查数据库中是否存在约束(唯一的外键),以便完成进一步的操作。 到目前为止,我尝试的是运行drop并尝试捕获异常,但它使事务失败,并停止后续迁移 设置: Spring jOOQ无需代码生成 FlywayDB作为迁移库 Postgres