1
我有一個SQL語句做更新,然後如果@@ROWCOUNT
是0,它會插入。這基本上是SQL 2008.中的一個MERGE
。我們遇到兩個線程同時失敗的情況。它會嘗試在表中插入相同的密鑰兩次。我們正在使用默認事務隔離級別Read Committed。將水平改爲可重複讀取可以解決這個問題,還是我必須一路走到Serializable才能完成這項工作?這裏是一些代碼:修復交易隔離級別重複讀取的問題?
SET TRANSACTION ISOLATION LEVEL REPEATABLE READ;
BEGIN TRAN;
UPDATE TableA
SET Duration = @duration
WHERE keyA = @ID
AND keyB = @IDB;
IF @@rowcount = 0
BEGIN
INSERT INTO TableA (keyA,keyB,Duration)
VALUES (@ID,@IDB,@duration);
END
COMMIT TRAN;
SET TRANSACTION ISOLATION LEVEL READ COMMITTED;";
您不會因爲讀取已提交事務隔離級別而進行髒讀操作。讀取未提交只能獲得髒讀。 – 2011-10-19 00:43:17
不好意思說 - 做更新和插入原子。我如何結合他們 – Ryan