2009-10-26 33 views
0

我知道「允許觸發器觸發他人」服務器設置,允許觸發器採取的行動觸發另一個觸發器(或不),據我所知,我唯一的選擇是真實的(允許觸發器觸發其他觸發器,這可能導致無止境的遞歸)或False(觸發器採取的行動不會觸發任何其他觸發器,這可能會導致意外的結果或不一致的數據)。「SQL Server中允許的最大觸發深度」?

有沒有辦法在SQL Server中實施「最大觸發深度」?我使用的是2008年,如果它很重要,雖然我不知道任何版本(或任何其他RDBMS中的功能,儘管我的知識是有限的)。例如,以下是我想要的:

  1. 將「最大觸發深度」設置爲「2」。
  2. 我行插入table1的
  3. 在表1中插入一個觸發器到表2
  4. 對錶2中插入一個觸發器到表3
  5. 有上表3的觸發器將插入到表4,但由於最大深度爲2 ,或者觸發器沒有運行(理想度較低,但與SQL Server上的當前「遞歸觸發器= False」行爲一致),或者整個插入集回滾並失敗,出現錯誤,如「最大觸發深度(最大觸發深度2)超過 - 插入失敗「消息(理想)

是否有人ou在那裏知道這是否可能,或者是否存在針對此行爲的突出特性請求?如果我瘋了,這是一個可怕的行爲主意,我願意接受,但我想知道爲什麼(無意的後果等)。

回答

4

內觸發,你可以檢查嵌套級別,並選擇返回:

IF (TRIGGER_NESTLEVEL() > 2) 
    RETURN 

有關詳細信息,請參閱本blog post

+0

exec sp_CONFIGURE'nested_triggers'只能取值0或1。 – 2009-10-26 16:32:29

+0

@Lukasz Lysik:你是對的,發表編輯 – Andomar 2009-10-26 16:34:20

+0

那篇博客文章正是我所期待的 - 謝謝。我不相信我不知道這個功能 – SqlRyan 2009-10-26 16:45:28