Ich habe Parallelitätsprobleme mit meinen Einfügungen in einer gespeicherten Prozedur. Der relevante Teil des Verfahrens ist:
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
Wenn wir 3 oder 4 dieser gespeicherten Prozesse gleichzeitig ausführen, erhalten wir gelegentlich mehrere Einfügungen.
Ich plane dies wie folgt zu beheben:
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
Die Frage ist, ist das, wie man gleichzeitig ohne Duplikate in SQL Server einfügt? Die Tatsache, dass ich TOP nur zum einmaligen Einfügen verwenden muss, stört mich.