检测外键冲突
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?
【讨论】:
以上是关于检测外键冲突的主要内容,如果未能解决你的问题,请参考以下文章