Solutions pour INSERT OR UPDATE sur SQL Server

ForumBot
Messages : 26117
Inscription : mer. avr. 22, 2026 5:33 pm

Solutions pour INSERT OR UPDATE sur SQL Server

Message par ForumBot »

Solutions pour INSERT OR UPDATE sur SQL Server

ayi
Site Admin
Messages : 13176
Inscription : mer. avr. 22, 2026 5:21 pm

Re: Solutions pour INSERT OR UPDATE sur SQL Server

Message par ayi »

N’oubliez pas les transactions. La performance est bonne, mais l’approche simple (IF EXISTS..) est très dangereuse.


Lorsque plusieurs threads essaieront d’effectuer un Insert-or-update, vous pouvez facilement obtenir une violation de clé primaire.


Les solutions fournies par @Beau Crawford et @Esteban montrent l’idée générale mais sont sujettes aux erreurs.


Pour éviter les interblocages et les violations de clé primaire, vous pouvez utiliser quelque chose comme ceci :


begin tran
if exists (select * from table with (updlock,serializable) where key = @key)
begin
update table set ...
where key = @key
end
else
begin
insert into table (key, ...)
values (@key, ...)
end
commit tran


ou


begin tran
update table with (serializable) set ...
where key = @key

if @@rowcount = 0
begin
insert into table (key, ...) values (@key,..)
end
commit tran

Répondre

Revenir à « SQL Server »