嗨我有一个简单的表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中的相关记录或合并失败)。
答案 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