У мене виникають проблеми з одночасністю моїх вставок у збереженій процедурі. Відповідна частина процедури така:
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 цих збережених процесорів одночасно, ми отримуємо декілька вставок при нагоді.
Я планую виправити це так:
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 для вставки лише один раз.