此触发器是否会导致SQL Server 2008 R2中的无限递归

时间:2014-07-17 15:18:23

标签: triggers sql-server-2008-r2

我有一个SQL Server 2008 R2数据库,其中有一个名为'xyz'的表。此表具有以下触发器,其中我通过从同一服务器上的另一个数据库获取插入记录的用户名来填充该用户名。

我的问题是:此触发器是否会导致执行相同的触发器,因此最终会导致不必要的递归?我在测试中没有找到任何这样的东西,但只是想确定,因为我对触发器世界全新。

ALTER TRIGGER [dbo].[trig_UpdateProduct]
ON [dbo].[xyz]
AFTER INSERT
AS
BEGIN

  SET NOCOUNT ON;

  UPDATE xyz
  SET UserName = pu.UserName
  FROM INSERTED i
  INNER JOIN SampleDB.dbo.ProductUser pu
    ON i.ProductId = pu.ProductId
  WHERE xyz.ProductId = i.ProductId

END

1 个答案:

答案 0 :(得分:1)

触发器不应导致递归。即使触发器的名称是trig_UpdateProduct,它也是AFTER INSERT触发器,因此它只会触发插入(当然)。触发器tsql执行更新。

需要注意的是Recursive Triggers Enabled是可以在数据库级别设置的属性。在SSMS中,右键单击数据库并选择属性。单击“选择页面”窗格中的“选项”,您将看到一个将属性设置为True / False的位置。