SQL Server中的“允许的最大触发深度”?

时间:2009-10-26 16:27:36

标签: sql-server triggers data-consistency

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

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

  1. 将“最大触发深度”设置为“2”。
  2. 我在table1中插入一行
  3. table1上的触发器插入table2
  4. table2上的触发器插入table3
  5. table3上有一个触发器会插入到table4中,但由于最大深度为2,因此触发器不会运行(不太理想,但与SQL Server上当前的“Recursive triggers = False”行为一致) ,或整个插入集被回滚并失败,出现“最大触发深度(2)超出 - 插入失败”消息(理想)
  6. 是否有人知道这是否可行,或者是否有针对此行为的未决功能请求?如果我疯了,这对行为来说是一个可怕的想法,我对此持开放态度,但我想知道为什么(无意的后果等)。

1 个答案:

答案 0 :(得分:4)

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

IF (TRIGGER_NESTLEVEL() > 2)
    RETURN

有关详细信息,请参阅此blog post