2008-09-18 67 views
4

假設我有如果我打電話從現有的交易這個PROC管理自己的事務在存儲特效適當範圍的交易

CREATE PROCEDURE theProc 
AS 
BEGIN 

    BEGIN TRANSACTION 

-- do some stuff 

    IF @ThereIsAProblem 
    ROLLBACK TRANSACTION 
    ELSE 
    COMMIT TRANSACTION 
END 

一個存儲過程時,PROC可以回滾外部事務。

BEGIN TRANSACTION 
EXEC theProc 
COMMIT TRANSACTION 

如何正確地確定存儲過程中的事務範圍,以便存儲過程不會回滾外部事務?

+0

觀看[這個DNR-TV視頻](http://www.intellectualhedonism.com/2008/06/01/dnrTV113BrentVanderMeideOnTransactionScopesInNET20Part1.aspx),他們談論了很多關於事務範圍的知識,雖然在代碼和SQL中處理它。希望這可以幫助。 – 2008-09-18 23:29:46

回答

2

的語法時,要做到這一點可能是由數據庫而異。但是在Transact-SQL中,您所做的是檢查@@ TRANCOUNT以查看您是否處於事務中。如果你想創建一個保存點,最後你可以直接通過函數的末尾(相信稍後會發生提交或回滾),否則回滾到你的保存點。

有關更多信息,請參閱微軟有關savepoints的文檔。

對保存點的支持相當普遍,但我認爲發現您目前處於事務中的機制(假設有一個)會有很大的不同。

1

使用@@ TRANCOUNT看到,如果你在一個事務中是已經進入