假设我在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'
答案 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触发器中,则为是。