由于另一个表中的依赖项/引用,无法从表中删除行

时间:2014-04-24 11:11:11

标签: sql sql-server

我有一个存储过程从表中删除记录,其中一列与指定值匹配:

ALTER PROCEDURE [dbo].[Sp_DelBranch] @datafield varchar(50)
AS
BEGIN
    DELETE FROM Branch WHERE branchname = @datafield     
END

不幸的是,执行时出现以下错误:

  

DELETE语句与REFERENCE约束冲突" fk_BranchIdDept"。冲突发生在数据库" MproWorkSpace",table" dbo.Department",column' BranchId'。

任何人都可以解释为什么我会看到这个错误吗?

3 个答案:

答案 0 :(得分:1)

  

与REFERENCE约束冲突" fk_BranchIdDept"。

这意味着,您尝试删除的value在其他表中为primary key,并在此表中引用为foreign key,即主外键关系通过约束fk_BranchIdDept映射...因此,除非删除引用的主键,否则无法从表中删除外键。

否则,这将导致数据不一致!

寻找Cascade Delete来帮助你!
SQL ON DELETE CASCADE, Which Way Does the Deletion Occur?

答案 1 :(得分:0)

错误表示Department表中有一些行引用了您尝试删除的分支。

您应首先从Department表中删除相应的行,或更改这些行的BranchId列中的值,以便指向其他某个分支。

答案 2 :(得分:0)

  

DELETE语句与REFERENCE约束“fk_BranchIdDept”冲突。

您尝试删除的记录在其他表中引用;删除分支记录会使其他表孤立,并引用不再存在的内容。

有两种方法:

  1. 在从分支表中删除之前删除引用表中的所有记录
  2. 执行cascade delete(从分支表中删除会触发每个引用表中的删除)