查看触发器触发的顺序

Mik*_*ike 3 sql-server-2008 sql-server

我们有 2 个 SQL Server 2008 环境,其中包含一些针对包含业务逻辑的表的触发器

在 2 个环境中,我们可以看到触发器以不同的顺序触发(感谢触发器中的打印语句)

如何查看每个环境中的触发器触发顺序?我知道我可以sp_settriggerorder用来设置它们,但我们想看看这两种环境有什么区别

Aar*_*and 8

sp_settriggerorder只允许你设置第一个/最后一个,中间没有。SQL Server 将如何触发中间的(或全部,如果您还没有使用过)完全取决于 SQL Server,它甚至可能不是确定性的,并且不会存储下次触及表时如何触发它们任何地方。甚至文档也指出订单是“未定义的”......

如果触发器触发的顺序很重要,那么我强烈建议将它们整合起来,而不是一开始就拥有一堆单独的触发器。由于行为未定义,即使您观察到某一天触发器触发 a,b,c - 没有什么能阻止 SQL Server 在第二天触发它们 c,a,b。如果您曾经 sp_settriggerorder设置过第一个/最后一个,您可以OBJECTPROPERTY按照本答案中的说明手动查看那些。但是,如果您有超过三个,则无法预测您未标记为第一个或最后一个的顺序。

  • @jean“业务逻辑”是一个含糊不清的术语。我们都不知道 OP 到底是什么意思。让我们把这个问题留给另一个问题——比如关于特定业务逻辑的问题,以及在特定情况下它是否应该在数据库中。用这么粗的画笔作画肯定不是我能容忍的。这个问题根本与业务逻辑无关。 (4认同)