我在存储过程中的插入出现并发问题。该过程的相关部分是:
select @_id = Id from table1 where othervalue = @_othervalue
IF( @_id IS NULL)
BEGIN
insert into table1 (othervalue) values (@_othervalue)
select @_id = Id from table1 where othervalue = @_othervalue
END
当我们同时运行3或4个这些存储的proc时,有时会得到多个插入。
我打算像这样修复此问题:
insert into table1 (othervalue)
select TOP(1) @_othervalue as othervalue from table1 WITH(UPDLOCK)
where NOT EXISTS ( select * from table1 where othervalue = @_othervalue )
select @_id = Id from table1 where othervalue = @_othervalue
问题是,如何在sql服务器中并发插入而不重复?我必须使用TOP只插入一次的事实困扰着我。
1
您不必使用TOP。从SELECT语句中删除FROM表引用。
—
ErikE 2012年
@GSerg我认为您是正确的。
—
克里斯