вставьте и обновите, если запись существует, нет условия гонки - PullRequest
0 голосов
/ 14 апреля 2011
if exists (select itemcode from item where itemcode=1120)
update item 
set itemname = 'laptop'
where itemcode = 1120

else 
insert into item (itemcode,itemname)
values (1120,'laptop')

будет использоваться несколькими пользователями. даст ли этот запрос условие гонки. если да, то как? что мне использовать вместо этого запроса?

1 Ответ

1 голос
/ 17 марта 2019

Вы можете использовать transaction для этого. Убедитесь, что все необходимые таблицы заблокированы в одной транзакции, а затем отпустите их.

begin transaction

begin try

    if exists (select itemcode from item where itemcode=1120)
    BEGIN
    update item 
    set itemname = 'laptop'
    where itemcode = 1120
    END

    else 
    BEGIN
    insert into item (itemcode,itemname)
    values (1120,'laptop')
    END

    commit transaction

end try

begin catch
  raiserror('Message here', 16, 1)
  rollback transaction
end catch

Вы также можете дать название своей транзакции, если у вас есть несколько.

...