MSSQL 级联删除两列 FK 到一 Table
MSSQL Cascade Delete Two columns with FK to one Table
嗨,我有一个简单的 Table 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 或两者上)时从 Table B 中删除记录。
我已经在 A1 关系上创建了 DELETE 动作级联并且它运行良好,但是当我尝试在 A2 关系上设置 DELETE 动作级联时我得到:
'A' table saved successfully 'B' table
- Unable to create relationship 'FK_B_A2'. Introducing FOREIGN KEY constraint 'FK_B_A2' on table 'B' may cause cycles or multiple cascade
paths. Specify ON DELETE NO ACTION or ON UPDATE NO ACTION, or modify
other FOREIGN KEY constraints. Could not create constraint or index.
See previous errors.
我不明白为什么这个设置不了?我只是希望能够在 table A 上使用 SQL MERGE(当某些内容被删除时,我想删除 table B 中的相关记录,否则合并失败)。
你可以通过
解决这个问题
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
嗨,我有一个简单的 Table 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 或两者上)时从 Table B 中删除记录。
我已经在 A1 关系上创建了 DELETE 动作级联并且它运行良好,但是当我尝试在 A2 关系上设置 DELETE 动作级联时我得到:
'A' table saved successfully 'B' table - Unable to create relationship 'FK_B_A2'. Introducing FOREIGN KEY constraint 'FK_B_A2' on table 'B' may cause cycles or multiple cascade paths. Specify ON DELETE NO ACTION or ON UPDATE NO ACTION, or modify other FOREIGN KEY constraints. Could not create constraint or index. See previous errors.
我不明白为什么这个设置不了?我只是希望能够在 table A 上使用 SQL MERGE(当某些内容被删除时,我想删除 table B 中的相关记录,否则合并失败)。
你可以通过
解决这个问题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