Sql-Server

表 A 觸發對錶 B 的插入,表 B 觸發對錶 A 的插入,會發生什麼?

  • January 10, 2018

假設我有兩個表,表 A 和表 B。表 A 有一個插入觸發器,可以將記錄插入表 B。表 B 有一個插入觸發器,可以將記錄插入表 A。在這種情況下會發生什麼?這兩個觸發器是否會不斷地向表中插入記錄,直到數據庫填滿?這種情況發生的次數是否有限制?

除了明顯的“呃,不要那樣做”……這大約需要兩分鐘來測試。

USE tempdb;
GO

CREATE TABLE dbo.TableA(ID INT);

CREATE TABLE dbo.TableB(ID INT);

GO
CREATE TRIGGER dbo.TableAToB
ON dbo.TableA
FOR INSERT
AS
 INSERT dbo.TableB SELECT ID FROM inserted;
GO
CREATE TRIGGER dbo.TableBToA
ON dbo.TableB
FOR INSERT
AS
 INSERT dbo.TableA SELECT ID FROM inserted;
GO

INSERT dbo.TableA(ID) VALUES(1);

錯誤:

消息 217,級別 16,狀態 1,過程 TableBToA 超出

最大儲存過程、函式、觸發器或視圖嵌套級別(限制 32)。

此外,任何一個表中都沒有插入任何行。

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