Sql-Server
檢查@@ROWCOUNT 失敗
我的一個 SQL 過程中有一個類似於下面的程式碼,
declare @rowcount int update table1 set value = @value where id = @id select @rowcount = @@ROWCOUNT if ( @rowcount = 0 ) begin insert into table1(id, value1,value2...) select (@id, @value1, @value2...) end
但它很少失敗,比如一天一次等。這意味著數據存在於表中,@@rowcount 為 0,它試圖插入數據並且發生主鍵衝突。這裡插入的所有值,即。id,value1,value2 等是整數。有什麼想法嗎?
我不確定您為什麼要使用變數,但是您需要使用事務保護多個語句。發生的情況是兩個使用者同時呼叫該過程,都得到 rowcount = 0,然後他們都試圖插入結果。
set transaction isolation level serializable; begin transaction; update dbo.table1 set value = @value where id = @id; if (@@ROWCOUNT = 0) begin insert dbo.table1(id, value1,value2...) values(@id, @value1, @value2...); end commit transaction;
自從寫了這個答案後,我在部落格上寫了這個: