2010-06-28 81 views
3

我對觸發器中的事務有一些疑問,對此我還沒有找到答案。TSQL使用事務創建觸發器並嘗試捕獲塊

CREATE TRIGGER A_AI ON A 
AFTER INSERT AS 

    BEGIN TRY --is the try block 1 transaction ? or do I have to begin the transaction? 

     --BEGIN TRAN: may I start the transaction like this? 
     -- SOME DANGEROUS OPERATIONS 

     COMMIT --has this sense here? 
    END TRY 
    BEGIN CATCH --silent catch no rasing errors. 
     ROLLBACK TRANSACTION -- does it work without BEGIN TRANSACTION? if so, is it the whole try block? 
    END CATCH 

GO 

回答

5

觸發器始終在事務上下文中執行 - 每個DML語句都在事務中運行。在SQL Server中,通常將Implicit Transactions設置爲commit automatically,這通常是隱藏的。

如果您從觸發器內發出回滾,則會(回滾一樣)回滾所有事務,無論是否嵌套。

一般來說,除非(如在你的註釋過的例子中)你明確地打開一個嵌套事務,否則你不會在觸發器內提交。

如果您的問題還有其他方面,我無法從您發佈的示例中計算出它們的含義。儘管在提問SQL問題時,我總是對發佈實際SQL的人表示敬意,但有時候會有一些評論或實際問題的重點列表可以提供幫助。

+0

好的,下次我會改進我的答案。謝謝,你已經解釋了我需要知道的東西! – 2010-06-28 08:46:53