關於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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Python學習筆記 - 多執行緒Python筆記執行緒
- Java 多執行緒學習筆記Java執行緒筆記
- Java多執行緒學習筆記(自用)Java執行緒筆記
- 【學習筆記】關於Freemark程式碼輸出值的問題筆記
- 有個關於多執行緒的識別問題執行緒
- C# 多執行緒學習筆記 – 1C#執行緒筆記
- 關於linux多執行緒fork的理解和學習Linux執行緒
- 多執行緒相關問題執行緒
- Thinking in Java---多執行緒學習筆記(2)ThinkingJava執行緒筆記
- dotnet學習筆記-專題01-非同步與多執行緒-01筆記非同步執行緒
- 關於http(自己的學習筆記)HTTP筆記
- Myth 關於Git的學習筆記Git筆記
- Thinking in Java--Java多執行緒學習筆記(1)ThinkingJava執行緒筆記
- 關於機器視覺學習路線的問題?視覺
- Java多執行緒學習筆記(六) 長樂未央篇Java執行緒筆記
- 關於js執行緒問題的解讀JS執行緒
- 多執行緒筆記執行緒筆記
- Linux程式執行緒學習筆記Linux執行緒筆記
- C++學習隨筆——關聯容器的迭代器失效問題C++
- 【Python3學習筆記】之【Python高階——多執行緒】Python筆記執行緒
- 關於物件導向的方法並行執行的問題物件並行
- (三)Java併發學習筆記–執行緒封閉Java筆記執行緒
- 關於程式碼如何執行的五個問題
- 面試中關於多執行緒同步,你必須要思考的問題面試執行緒
- HashMap多執行緒併發問題分析HashMap執行緒
- iOS 多執行緒筆記iOS執行緒筆記
- 多執行緒筆記 一執行緒筆記
- 多執行緒筆記 三執行緒筆記
- 多執行緒筆記 二執行緒筆記
- Java多執行緒筆記Java執行緒筆記
- Python學習筆記|Python之執行緒Python筆記執行緒
- Spring 學習筆記(五)執行時注入Spring筆記
- spark學習筆記--叢集執行SparkSpark筆記
- JVM學習筆記——節碼執行引擎JVM筆記
- Java多執行緒學習(七)併發程式設計中一些問題Java執行緒程式設計
- Java併發程式設計學習筆記----執行緒池Java程式設計筆記執行緒
- iOS學習筆記05 觸控事件iOS筆記事件
- 關於django reset_framework學習之路的筆記DjangoFramework筆記
- [個人筆記] 關於linux的常見問題合集筆記Linux