1
我的SQL-Server
我的SQL-Server
學習曲線已經回到前面,幾年後,我正在努力有效地使用TRANSACTION
代碼。如果沒有回滾,ROLLBACK TRANSACTION是否意味着提交
如果COMMIT TRANSACTION
沒有明確說明,那麼在ROLLBACK TRANSACTION
的位置上,如果在前面的代碼中沒有發生錯誤,事務會被提交嗎?現在的問題是與類似下面的結構連接:
USE MyDataBase;
GO
BEGIN TRANSACTION;
--complex query X here
ROLLBACK TRANSACTION; PRINT N'Rolled back the transaction.';
GO
...我想ROLLBACK TRANSACTION
是在一個情況下使用,你不想一個數據庫進行的更改,如果錯誤在已發生前面的腳本 - 在上面這將是X
。如果我想在上面明確說明COMMIT TRANSACTION
那麼它應該放在哪裏?
爲了讓我更加困惑,我得到了以下 - 爲什麼它回滾兩次?發生錯誤以創建ROLLBACK
?
USE WHAnalysis;
GO
BEGIN TRANSACTION;
IF @@TRANCOUNT = 1
SELECT @@TRANCOUNT
--do a complex query here
ROLLBACK TRANSACTION; PRINT N'Rolled back the transaction.';
GO
測試有一個簡單的腳本我可以替換' - 做查詢',以便創建一個錯誤? – whytheq
這是一個通用的'T-SQL'設計模式,你用了很多? – whytheq
嘗試'選擇10/0'。是。 – podiluska