8

我在某些情況下看到了交易使用情況,但從未真正瞭解應該在哪種情況下使用它們。應該如何以及何時使用交易(開始交易聲明)?我讀過微軟不建議在觸發器和存儲過程中使用事務語句(提交,回滾)。如何使用事務(開始事務,提交事務)?

回答

5

在插入或操作數據以確保一切都一致時,可以將事務與存儲過程或SQL腳本中的錯誤處理結合使用。例如,如果您有一個將記錄插入父表和子表的存儲過程,則需要確保首先插入父記錄;如果失敗,您可以回滾您的更改,以便您沒有孤兒記錄。關於如何在SQL Server中使用錯誤處理,Erland Sommarskog有great article

最後,哪裏有微軟建議不是在存儲過程中使用事務嗎?我認爲存儲過程將是一個理想的使用它們的地方。

+0

謝謝,也許我的說法的一個例子是關於太直了:有一種警告,使用提交或回滾過程或觸發器內可能會導致錯誤:http://msdn.microsoft.com /en-us/library/ms187844(v=SQL.100).aspx – juur 2010-09-26 16:37:15

2

如果我從一個賬戶轉移到moey另外,我希望它是100%成功或100%的失敗:

UPDATE PersonalAccount SET Balance = Balance - 100 WHERE Username = 'gbn' 
--what if the server caught fire here? 
UPDATE SavingsAccount SET Balance = Balance + 100 WHERE Username = 'gbn' 

至於你所讀的,但沒有必要使用完整的垃圾BEGIN TRAN在觸發器中。

從「Nested stored procedures containing TRY CATCH ROLLBACK pattern?