表 A 触发对表 B 的插入,表 B 触发对表 A 的插入,会发生什么?

Cha*_*une 3 trigger sql-server insert t-sql

假设我有两个表,表 A 和表 B。表 A 有一个插入触发器,可将记录插入表 B。表 B 有一个插入触发器,可将记录插入表 A。在这种情况下会发生什么?这两个触发器是否会一遍又一遍地将记录插入表中,直到数据库填满?这种情况发生的次数有限制吗?

Aar*_*and 5

除了明显的“呃,不要那样做”……这花了大约两分钟的时间来测试。

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);
Run Code Online (Sandbox Code Playgroud)

错误:

消息 217,级别 16,状态 1,过程表 BToA 超出
最大存储过程、函数、触发器或视图嵌套级别(限制 32)。

此外,任何行都不会插入到任一表中。

  • @chani 您最需要做的是从 Microsoft 的下载站点下载带有 Management Studio 的 SQL Server Express,安装并试用。您应该始终拥有一台用于测试目的的开发机器。 (2认同)