Sql-Server

SQL Server 中同一個表的兩個關係

  • March 7, 2014

我有兩張桌子。當我刪除 中的一行時Table1,我想將ID所有行中的該行設置Table2為 NULL。我有兩個關係Table1

問題是:我只能設置一個刪除規則:設置 NULL。如果我嘗試設置另一個失敗。但是當我嘗試從中刪除ID 1Table1,這現在也失敗了。

我的表數據如下所示:

表格1:

ID  Text
1   Hoi
2   Hoi

表2:

ID  ForeignID1  ForeignID2
1   1   2
2   1   1

兩張桌子

我需要如何設置約束,以便在Table2刪除行時將 Foreign IDs 設置為 NULL Table1

約束是不可能的。查看多個級聯操作

在由 DELETE 或 UPDATE 產生的所有級聯引用操作的列表中,任何表都不能出現多次。

您可以使用 an 而不是觸發器,而不是在Table2delete in 之前執行 update in Table1

觸發器可能看起來像這樣

create trigger Table1_Delete on Table1 instead of delete
as

update Table2
set Table1ID1 = null
where Table2.Table1ID1 in (select D.Table1ID from deleted as D);

update Table2
set Table1ID2 = null
where Table2.Table1ID2 in (select D.Table1ID from deleted as D);

delete from Table1 
where Table1.Table1ID in (select D.Table1ID from deleted as D);

引用自:https://dba.stackexchange.com/questions/60390