检测外键冲突

Posted

技术标签:

【中文标题】检测外键冲突【英文标题】:Detecting foreign key conflicts 【发布时间】:2015-11-23 17:58:28 【问题描述】:

有时,当您尝试在 SQL Server 中删除表中的一行时,您会收到错误,因为该行充当另一个表中的外键。

当我在表单中执行删除命令时,如何在 Visual Studio 2013 中检测到这一点

【问题讨论】:

请显示一些代码,但我会冒险尝试catch aqnd 捕捉适当的 SQL 异常 @3dd 如果 OP 在Stored Procedure or Query 检查sys.foreign_keys 如果存在则不能删除,如果它不存在则不能删除。然后继续前进删除。 处理这个问题的正确方法是......了解您的数据,了解您正在编码的数据。您的应用程序应该知道哪些数据相互依赖,并根据数据隐含的规则删除所有内容。如果外键约束禁止你删除数据,你会怎么做?你应该在尝试解决这个问题之前回答这个问题 【参考方案1】:

你能不能只执行和/或执行查询/存储过程来检查以下内容

IF NOT EXISTS ( SELECT  name
     FROM    sys.foreign_keys
     WHERE   name = 'FK_Name' ) 

//do some work or your Deleting etc...

【讨论】:

外键约束的存在并不表示删除会失败。它可能表明它有可能会失败,但不是它是否会失败。【参考方案2】:

我不知道要捕获什么异常,我猜我谷歌搜索的力度不够

How can I know if an SQLexception was thrown because of foreign key violation?

【讨论】:

以上是关于检测外键冲突的主要内容,如果未能解决你的问题,请参考以下文章

C#检测外键冲突的代码

插入语句与外键冲突

navicat外键命名冲突报错

是否可以在使用 sqlite 插入时忽略外键冲突?

实体框架中与代码优先外键的更改冲突

使用 pl/sql 函数插入多个表会导致外键冲突