首先,我不需要 100% 防止死锁,但我能做的任何事情来减少它们都会很好。
我有两张桌子Source
和Dest
. Source 中有许多唯一值,我需要从中请求一个新值,Source
并在这样做时将其移动到Dest
.
我有以下sql:
begin tran
declare @value
select top 1 @value = [value] from [source]
delete from [Source] where [value]=@value
insert into [Dest] ([Value]) values (@value)
select @value
commit tran
当多个用户获得同一value
行时,这偶尔会引发死锁。我该如何预防/减少这种情况?
我正在使用 SQL Server 2008
顺便说一句,还有其他列Source
,Dest
我正在阅读/写入。为了简洁起见,这是一个简化。
谢谢