J'ai des problèmes de concurrence avec mes insertions dans une procédure stockée. La partie pertinente de la procédure est la suivante:
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
Lorsque nous exécutons 3 ou 4 de ces proc stockés simultanément, nous obtenons plusieurs insertions à l'occasion.
Je prévois de résoudre ce problème comme ceci:
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
La question est, est-ce que comment insérer simultanément sans doublons dans le serveur SQL? Le fait que je doive utiliser TOP pour ne l'insérer qu'une seule fois me dérange.