MSSQL Cascade删除两列FK到一个表

时间:2017-03-19 08:45:00

标签: sql-server merge foreign-keys relationship cascade

嗨我有一个简单的表A和B,

Table A 
int Id NOT NULL

Table B
int Id NOT NULL
int A1 NULL (FK to Table A.Id)
int A2 NULL (FK to Table A.Id)

我想做的是删除相关记录(在A1,A2或两者上)时从表B中删除记录。

我在DELETE动作上创建了关于A1关系的Cascade并且​​它完美地工作但是当我尝试设置DELETE动作Cascade on A2关系时我得到了:

  

'A'表成功保存'B'表    - 无法创建关系'FK_B_A2'。在表'B'上引入FOREIGN KEY约束'FK_B_A2'可能导致循环或多个级联   路径。指定ON DELETE NO ACTION或ON UPDATE NO ACTION,或修改   其他FOREIGN KEY约束。无法创建约束或索引。   查看以前的错误。

我不明白为什么不能这样设置?我很简单希望能够在表A上使用SQL MERGE(当删除某些内容时我想删除表B中的相关记录或合并失败)。

1 个答案:

答案 0 :(得分:2)

你可以通过

解决这个问题

1)在A1

上设置级联删除

2)而不是在A2上设置级联删除而不是这样创建触发器

CREATE TRIGGER [DELETE_B]
   ON dbo.[A]
   INSTEAD OF DELETE
AS 
BEGIN
 SET NOCOUNT ON;
 DELETE FROM [B] WHERE A2 IN (SELECT Id FROM DELETED)
 DELETE FROM [A] WHERE Id IN (SELECT Id FROM DELETED)
END