Tengo problemas de concurrencia con mis inserciones en un procedimiento almacenado. La parte relevante del procedimiento es esta:
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
Cuando ejecutamos 3 o 4 de estos procesos almacenados simultáneamente, obtenemos múltiples inserciones en ocasiones.
Estoy planeando arreglar esto así:
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 pregunta es, ¿cómo insertar simultáneamente sin duplicados en el servidor SQL? El hecho de que tenga que usar TOP para insertar solo una vez me molesta.