關於SQLServer2005的學習筆記——多觸發器執行問題
在某環境中資料表存在多個觸發器,資料的增刪改是標準的每個表都有的觸發器,此外還存在關於校驗的觸發器;起因是寫完觸發器後,有一次同事詢問說觸發器不起作用了,沒有提示錯誤,但是資料無法儲存;我也有點莫名其妙,在查詢分析器中執行直接就提示錯誤了,可在應用程式中無法提示錯誤。
同事提醒說需要執行一段設定觸發器觸發先後順序的程式碼,查了一下為sp_settriggerorder;看了下幫助修改了一下即可。不過只看SQLServer聯機幫助似乎是無法理解的,透過此次才瞭解該儲存過程的意義。
以下為聯機幫助中的釋義。
sp_settriggerorder 指定第一個或最後一個激發的、與表關聯的 AFTER 觸發器。在第一個和最後一個觸發器之間激發的 AFTER 觸發器將按未定義的順序執行。 語法 sp_settriggerorder[@triggername = ] 'triggername' |
做個簡單測試,新建2張表和2個觸發器
CREATE TABLE TestA ( a VARCHAR(20) ); CREATE TABLE TestB ( a VARCHAR(20) ); ALTER TRIGGER [Tri_Test1] ON TestA AFTER INSERT,UPDATE AS SET NOCOUNT ON DECLARE @a VARCHAR(20) SELECT @a=a FROM INSERTED IF @a='A' OR @a='a' BEGIN RAISERROR ( '該條記有問題,不能重複儲存!', 16, 1 ) ROLLBACK TRAN RETURN END
ALTER TRIGGER [Tri_Syn_Test1] ON TestA AFTER INSERT,UPDATE AS SET NOCOUNT ON INSERT INTO TestB SELECT a FROM inserted COMMIT;
|
為TestA表插入一個A值,系統提示該條記有問題,不能重複儲存!
但是假如在應用程式中的話,很可能系統不會提示錯誤,但是儲存失敗,原因是Tri_Syn_Test1一定會執行成功,而應用程式捕獲不到後面觸發器中的錯誤了。
這個時候需要將Order設定為first
INSERT INTO TestA VALUES('A') sp_settriggerorder @triggername= '30SJK_TEST_U.Tri_Test1', @order='first', @stmttype = 'UPDATE'; sp_settriggerorder @triggername= '30SJK_TEST_U.Tri_Test1', @order='first', @stmttype = 'INSERT'; |
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/6517/viewspace-626166/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 關於SQLServer2005的學習筆記——約束、Check、觸發器的執行順序SQLServer筆記觸發器
- 關於SQLServer2005的學習筆記——生日問題SQLServer筆記
- 觸發器學習筆記觸發器筆記
- 關於SQLServer2005的學習筆記(一)——前言SQLServer筆記
- 關於觸發器在行級和語句級的執行順序問題觸發器
- 關於SQLServer2005的學習筆記——子查詢SQLServer筆記
- 關於SQLServer2005的學習筆記——分析函式SQLServer筆記函式
- 多執行緒學習筆記執行緒筆記
- 關於SQLServer2005的學習筆記——XML的處理SQLServer筆記XML
- Lance提問筆記:關於map的多執行緒操作筆記執行緒
- 關於SQLServer2005的學習筆記——樹形結構SQLServer筆記
- Java 多執行緒學習筆記Java執行緒筆記
- java學習筆記--多執行緒Java筆記執行緒
- 多執行緒學習筆記 (轉)執行緒筆記
- 小小問題―關於java多執行緒Java執行緒
- Python學習筆記 - 多執行緒Python筆記執行緒
- Java多執行緒學習筆記(自用)Java執行緒筆記
- C#多執行緒學習筆記C#執行緒筆記
- 關於SQLServer2005的學習筆記——SQL查詢解析步驟SQLServer筆記
- 關於SQLServer2005的學習筆記——自定義分組的實現SQLServer筆記
- 關於多執行緒訪問靜態方法的問題執行緒
- 關於SQLServer2005的學習筆記——異常捕獲及處理SQLServer筆記
- C# 多執行緒學習筆記 – 1C#執行緒筆記
- Java多執行緒學習筆記(二) (轉)Java執行緒筆記
- 有個關於多執行緒的識別問題執行緒
- Java 多執行緒學習筆記(三)-守護執行緒Java執行緒筆記
- 關於執行緒的問題...執行緒
- 【學習筆記】關於Freemark程式碼輸出值的問題筆記
- 一道關於筆試的多執行緒題目筆試執行緒
- 關於SQLServer2005的學習筆記——臨時表、表變數和CTESQLServer筆記變數
- struts2學習筆記–執行緒安全問題小結筆記執行緒
- JAVA學習筆記之 多執行緒賣票Java筆記執行緒
- 多執行緒相關問題執行緒
- Java 多執行緒 學習筆記(二)停止執行緒的幾種方法Java執行緒筆記
- 關於linux多執行緒fork的理解和學習Linux執行緒
- 關於http(自己的學習筆記)HTTP筆記
- 請教大俠。關於多執行緒同步問題執行緒
- Thinking in Java---多執行緒學習筆記(2)ThinkingJava執行緒筆記