如何对SQL Server中的两个外键强加级联删除或级联设置为null

时间:2018-11-27 05:13:14

标签: sql sql-server

我有2张桌子。

create table A 
(
    idA int primary key,
    .
    .
)

create table B 
(
   idA int, 
   idB int primary key,
   .
   .
   Foreign key (idA) A (idA) ON DELETE CASCADE
)

create Table AB 
(
    idA int,
    idB int,
    .
    .
    Foreign key (idA) A (idA),
    Foreign key (idB) B (idB)
)

该应用程序控制数据的方式是,在表AB 中,idAidB中的任何一个都将其他设置为空。

如何强加这样的内容

Foreign key (idA) A (idA) ON DELETE CASCADE,
Foreign key (idB) B (idB) ON DELETE CASCADE,

Foreign key (idA) A (idA) ON DELETE CASCADE,
Foreign key (idB) B (idB) ON DELETE SET NULL,

Foreign key (idA) A (idA) ON DELETE SET NULL,
Foreign key (idB) B (idB) ON DELETE SET NULL,

在每种情况下我都会遇到错误:

  

SQL错误[1785] [S0000]:
  在表'inventory_exception'上引入FOREIGN KEY约束'FK__inventory_except__2022C2A6'可能会导致循环或多个级联路径。指定ON DELETE NO ACTION或ON UPDATE NO ACTION,或修改其他FOREIGN KEY约束。

1 个答案:

答案 0 :(得分:0)

以下代码有效:

create table A (
    idA int primary key
);

create table B (
   idB int primary key
);

create Table AB (
    idA int,
    idB int,
    check (idA is null and idB is not null or idA is not null and idB is null),
    Foreign key (idA) A (idA) on delete cascade,
    Foreign key (idB) B (idB) on delete cascade
);

Here是db <>小提琴。

您似乎还有其他导致问题的约束。如果是这样,则您的问题没有足够的信息来真正解释问题。