まず、デッドロックを100%防げる必要はありませんが、減らすためにできることは何かいいです。このSQLで発生するデッドロックを防ぐ方法
私は2つのテーブルSource
とDest
を持っています。ソースにユニークな値のロードがあり、Source
から新しい値をリクエストする必要があります。その際、Dest
に移動してください。
私は、次のSQLを持っている:複数のユーザーが同じvalue
行を取得するとき
begin tran
declare @value
select top 1 @value = [value] from [source]
delete from [Source] where [value][email protected]
insert into [Dest] ([Value]) values (@value)
select @value
commit tran
これは時折デッドロックをスローします。これを防ぐ/減らすにはどうすればいいですか?
イムは、私はへの書き込み/から読んでいますSource
とDest
内の他の列がある、余談としてSQL Server 2008の
を使用します。これは、簡潔さのために簡素化されています。
おかげ
で
XLOCK
をつかむことができ - あなたの根本的な問題が一つではありませんあなたは尋ねています...あなたはどんな孤立レベルですか? –デフォルトですので、 'READ COMMITTED'と仮定します。 –