0

我知道“允许触发器触发其他触发器”服务器设置,它允许触发器执行的操作触发另一个触发器(或不触发),据我所知,我唯一的选择是 True(允许触发器触发其他触发器,这可能导致无休止的递归)或 False(触发器采取的操作不会触发任何其他触发器,这可能会导致意外结果或不一致的数据)。

有没有办法在 SQL Server 中强制执行“最大触发深度”?如果重要的话,我正在使用 2008,尽管我不知道任何版本(或任何其他 RDBMS 中的功能,就此而言,尽管我的知识是有限的)。例如,这就是我想要的:

  1. 将“最大触发深度”设置为“2”。
  2. 我在 table1 中插入一行
  3. table1 上的触发器插入 table2
  4. table2 上的触发器插入 table3
  5. table3 上有一个触发器会插入到 table4 中,但由于最大深度为 2,因此触发器不会运行(不太理想,但与 SQL Server 上当前的“递归触发器 = False”行为一致),或者整个插入集被回滚并失败并出现错误,例如“超出最大触发深度 (2) - 插入失败”消息(理想)

有没有人知道这是否可能,或者是否有针对此行为的出色功能请求?如果我疯了并且这是一个糟糕的行为想法,我对此持开放态度,但我想知道为什么(无意后果等)。

4

1 回答 1

4

在触发器中,您可以检查嵌套级别,并可选择返回:

IF (TRIGGER_NESTLEVEL() > 2)
    RETURN

有关更多详细信息,请参阅此博客文章

于 2009-10-26T16:30:19.773 回答