【问题标题】:MSSQL Cascade Delete Two columns with FK to one TableMSSQL级联删除带有FK的两列到一个表
【发布时间】:2017-08-10 14:38:44
【问题描述】:

您好,我有一个简单的表 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 中删除记录。

我已经在 A1 关系上创建了 DELETE 动作级联,它运行良好,但是当我尝试在 A2 关系上设置 DELETE 动作级联时,我得到了:

'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 中的相关记录或合并失败)。

【问题讨论】:

  • 表之间的关系是什么?表 B A1 A2 列与表 A Id 列相关?
  • 是的,我会更新我的帖子,A1 和 A2 列对表 A 有 FK

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


【解决方案1】:

你可以解决这个问题

1) 在A1上设置级联删除

2) 像这样创建 Trigger 而不是在 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

【讨论】:

  • 任何其他解决方案(无触发器)?
猜你喜欢
  • 2012-01-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-27
  • 1970-01-01
  • 2021-05-03
  • 1970-01-01
  • 2020-06-14
相关资源
最近更新 更多