2013-04-16 36 views
0

我需要使用不同的值更新幾個條目,並且每次更新都會產生一個查詢。多個更新時的T-SQL隔離

在此之前,我檢查每個初始值以確保條目可以更新。

我甚至不確定會發生這種情況,但是我希望避免讓這些條目在我進行檢查後被另一個查詢改變。

這裏是什麼我想避免

1的例子)QUERY1檢查初始值

2)QUERY2檢查初始值

3)QUERY1適用更新

4)QUERY2應用更新

我聽說過隔離級別,但無法弄清楚如何使用它來避免這個問題,你能幫我嗎?

在此先感謝您的幫助

回答

0

使用交易。

SET TRANSACTION ISOLATION LEVEL REPEATABLE READ; 
GO 
BEGIN TRANSACTION; 

--check stuff 

--update stuff 

COMMIT TRANSACTION; 

可重複讀取將確保您讀取的所有內容(選擇)在您的代碼達到提交事務之前保持不變。沒有人可以修改您閱讀過的記錄。 有關交易和隔離級別的詳細信息,請點擊此處:SET TRANSACTION ISOLATION LEVEL

1

我想知道爲什麼您不只是使用原子UPDATE在WHERE部分中執行必要的檢查,然後爲此進行更新?

無論如何,如果你需要使用選擇,然後更新: 我是指你很好的文章:http://samsaffron.com/blog/archive/2007/04/04/14.aspx

交易是必要的,以避免髒讀等,但還有一件事你應該注意的是死鎖。在分佈式方法中,如果您不使用UPDLOCK(爲進一步更新鎖定資源)您可以更新您讀取的不同數據。