我在事務中運行以下SQL更新查詢,以便在提交之前檢查結果。但是,在執行和回滾之後,我發現它已經提交併且我的數據已經改變,儘管從未發佈提交語句。SQL事務自我承諾
USE WS_Live
BEGIN TRAN Test
UPDATE AF
SET AF.AdditionalFieldsLookup11 = NULL
OUTPUT inserted.*
FROM dbo.Incident AS I
INNER JOIN dbo.AdditionalFields AS AF
ON AF.Oid = I.AdditionalFields
INNER JOIN dbo.AdditionalFieldsLookup11 AS AFL11
ON AFL11.Oid = AF.AdditionalFieldsLookup11
WHERE AF.AdditionalFieldsLookup11 IS NOT NULL
我的聲明是正確的格式,我沒有丟失任何重要的數據,但我想知道爲什麼會這樣,這樣我就不會遇到在未來的問題。
我已經完成了其他可以回滾的事務。爲什麼有些人會工作而不是其他人? – NonSecwitter 2014-09-30 18:00:03
從您的第一個鏈接看來,我的'BEGIN'應該覆蓋自動提交。 SQL Server連接以自動提交模式運行,直到BEGIN TRANSACTION語句啓動顯式事務或設置隱式事務模式爲止。 ' – NonSecwitter 2014-09-30 18:02:07
哦,等等......我知道我做了什麼。我沒有在SQL Query的末尾放置'ROLLBACK TRAN Test',而是用'ROLLBACK'替換了'BEGIN',所以它有效地回滾了我以前的事務,就好像我已經附加了命令一樣,然後繼續執行整個查詢在「ROLLBACK」行之後。 – NonSecwitter 2014-09-30 18:04:22