我需要使用不同的值更新幾個條目,並且每次更新都會產生一個查詢。多個更新時的T-SQL隔離
在此之前,我檢查每個初始值以確保條目可以更新。
我甚至不確定會發生這種情況,但是我希望避免讓這些條目在我進行檢查後被另一個查詢改變。
這裏是什麼我想避免
1的例子)QUERY1檢查初始值
2)QUERY2檢查初始值
3)QUERY1適用更新
4)QUERY2應用更新
我聽說過隔離級別,但無法弄清楚如何使用它來避免這個問題,你能幫我嗎?
在此先感謝您的幫助
我需要使用不同的值更新幾個條目,並且每次更新都會產生一個查詢。多個更新時的T-SQL隔離
在此之前,我檢查每個初始值以確保條目可以更新。
我甚至不確定會發生這種情況,但是我希望避免讓這些條目在我進行檢查後被另一個查詢改變。
這裏是什麼我想避免
1的例子)QUERY1檢查初始值
2)QUERY2檢查初始值
3)QUERY1適用更新
4)QUERY2應用更新
我聽說過隔離級別,但無法弄清楚如何使用它來避免這個問題,你能幫我嗎?
在此先感謝您的幫助
使用交易。
SET TRANSACTION ISOLATION LEVEL REPEATABLE READ;
GO
BEGIN TRANSACTION;
--check stuff
--update stuff
COMMIT TRANSACTION;
可重複讀取將確保您讀取的所有內容(選擇)在您的代碼達到提交事務之前保持不變。沒有人可以修改您閱讀過的記錄。 有關交易和隔離級別的詳細信息,請點擊此處:SET TRANSACTION ISOLATION LEVEL
我想知道爲什麼您不只是使用原子UPDATE在WHERE部分中執行必要的檢查,然後爲此進行更新?
無論如何,如果你需要使用選擇,然後更新: 我是指你很好的文章:http://samsaffron.com/blog/archive/2007/04/04/14.aspx
交易是必要的,以避免髒讀等,但還有一件事你應該注意的是死鎖。在分佈式方法中,如果您不使用UPDLOCK(爲進一步更新鎖定資源)您可以更新您讀取的不同數據。