【发布时间】:2014-07-17 15:18:23
【问题描述】:
我有一个 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
【问题讨论】:
-
触发器不应引起递归。尽管触发器的名称是
trig_UpdateProduct,但它是一个AFTER INSERT触发器,所以它只在插入时触发(当然)。触发器 tsql 执行更新。还有一点值得注意的是Recursive Triggers Enabled是一个可以在数据库级别设置的属性。在 SSMS 中,右键单击数据库并选择属性。单击“选择页面”窗格中的“选项”,您将看到一个将属性设置为 True/False 的位置。 -
@DMason,您能否发布此内容,以便我将您的回复标记为答案?谢谢。
-
@DMason,所以如果上面的触发器在 xyz 中插入了另一条记录,当 Recursive Trigger Enabled = false 时它不会触发递归?
-
是的,没错。
-
@DMason,谢谢。我正在学习有关触发器的新知识。
标签: triggers sql-server-2008-r2