我用下面的代碼:Begin Tran每次都需要一個新名字嗎?
--begin tran redist1
/*--FIRST Update
update db..tablename set column=value
where complexthing = othercomplexthing
*/
/*--SECOND Update
update db..tablename set column=replace(column,'A','1')
*/
select * from db..tablename
--rollback tran redist1
--commit tran redist1
我強調「的begin tran redist1」,開船,強調的第一大更新語句,並運行它,然後做與SELECT語句相同。它起作用了,所以我突出顯示了「commit tran redist1」。
接下來我突出顯示「begin tran redist1」,運行它,突出顯示SECOND更新語句並運行它,然後對select語句執行相同的操作。它沒有工作,所以我突出了「rollback tran redist1」。
接下來我突出顯示「begin tran redist1」,運行它,突出顯示SECOND更新語句並運行它,然後對select語句執行相同的操作。它這次工作,所以我突出顯示「commit tran redist1」。
我用了幾個更新語句,每次都重複這個過程。然後,我打開了一個「編輯」窗口,在我最後一次「提交」之後直接更改值,但SQL服務器僅爲該窗口保持超時,並說我的「commit tran redist1」是阻塞事務,儘管已完成。我再次運行提交,並打開編輯窗口,顯示數據,因爲我改變了它。
今天早上,我再次打開了編輯窗口,並且在我運行FIRST查詢+提交後,表格又回到了某種程度。所有後來的查詢+提交都丟失了。但是,我在編輯窗口中手動編輯的記錄仍然被編輯。
請注意,每次我使用名稱「redist1」,以每次事務的適當提交或回滾結束。我的問題是,是否重用名稱是我問題的原因?名稱的重用會造成某種類型的衝突嗎?
+1,我不認爲我曾經使用過一個命名事務。我一直都在失敗時回滾一切。 –
我對提交/回滾非常有條不紊,所以我肯定你所描述的意外嵌套沒有發生。我測試後立即承諾或回滾,以確保我沒有失去任何東西。每個說「成功完成」。 – Merennulli
@Merennulli - 可能。從您的描述中可能發現人爲錯誤。 – Oded