SQL Server触发器执行

时间:2011-01-07 23:24:08

标签: sql-server sql-server-2005

假设我在tableA上有一个UPDATE触发器,它将新记录插入tableB

CREATE TRIGGER insertIntoTableB
ON tableA
FOR UPDATE 
AS
   INSERT INTO tableB (...) VALUES (...)  
GO

然后我按顺序运行这些语句。第二个UPDATE语句(UPDATE tableB)是否正常工作? (即等待表A上的触发器完全执行)

UPDATE tableA
SET ...
WHERE key = 'some key'

UPDATE tableB
SET ...
WHERE key = 'newly inserted key from trigger'

2 个答案:

答案 0 :(得分:2)

该行为受nested triggers服务器配置的约束,请参阅Using Nested Triggers

  

DML和DDL触发器都是嵌套的   当触发器执行一个动作时   启动另一个触发器。这些   动作可以启动其他触发器,   等等。 DML和DDL触发器都可以   最多可嵌套32个级别。您可以   控制AFTER触发器是否可以   通过nested triggers嵌套   服务器配置选项。代替   OF触发器(只有DML触发器可以   INSTEAD OF触发器)可以嵌套   无论这个设置如何。

当表A上的触发器触发并且触发器表B内部更新时,表B上的触发器立即运行。表A触发器完成,它在等待UPDATE语句完成时被阻止,这反过来等待表B触发器完成。但是,表A的更新已经发生(假设正常的AFTER触发器)并且从表B的触发器中查询表A将看到更新。

答案 1 :(得分:1)

如果更新按顺序编码到A的UPDATE触发器中,则为是。