環境:SQL Server 2000(非 2005)。某資料表存在多個觸發器:標準增刪改觸發器 + 驗證類觸發器。現象:應用程式中資料無法儲存、無錯誤提示;查詢分析器直接執行卻能拋出錯誤。
觸發器執行順序未定義,導致驗證觸發器(會拋錯)執行順序靠後。應用程式僅捕獲第一個觸發器的結果,後續觸發器的錯誤被吞沒,造成「靜默失敗」。
sp_settriggerorder使用系統預存程序指定觸發器啟動順序:
EXEC sp_settriggerorder
@triggername = '驗證觸發器名稱',
@order = 'First',
@stmttype = 'INSERT/UPDATE/DELETE';
將關鍵驗證觸發器設為 First,確保錯誤優先拋出並被應用層捕獲。
Tri_Syn_Test1 正常、Tri_Syn_Test2 拋錯)。sp_settriggerorder 將拋錯觸發器設為 First。