索引视图更新与基表触发器的触发执行顺序是怎样的?
索引视图与基表触发器的执行顺序说明
首先明确核心结论:执行顺序和基表上定义的触发器类型直接相关,不同触发器类型的执行逻辑存在明显差异:
- 针对
INSTEAD OF触发器:这类触发器会替换原本要执行的基表DML操作,基表本身的修改、关联索引视图的更新都会在INSTEAD OF触发器逻辑执行完成后才会运行,此场景下索引视图更新晚于触发器执行。 - 针对默认的
AFTER触发器:索引视图的更新会在AFTER触发器触发之前完成,这也是你测试时观测到视图先完成更新的原因。
SQL Server官方文档明确了单条DML语句的完整执行顺序,索引视图的维护属于基表DML核心操作的一部分,相关执行流如下:
- 执行约束校验,运行匹配的
INSTEAD OF触发器逻辑- 执行基表的核心增删改操作,同步更新所有关联索引,包括基表自身的索引、所有绑定该基表的索引视图的聚集/非聚集索引
- 触发所有定义在该基表上的
AFTER触发器
你可以通过简单测试验证该逻辑:在基表的AFTER触发器中添加查询索引视图的逻辑,会直接查询到和修改后基表一致的内容,即可证明索引视图在AFTER触发器运行前已经完成更新。
内容的提问来源于stack exchange,提问作者Michael Cole
相关产品推荐
相关产品推荐

