Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

MERGE est-il une instruction atomique dans SQL2008 ?

MERGE est atomique, ce qui signifie que soit toutes les modifications sont validées, soit toutes les modifications sont annulées.

Cela n'empêche pas les clés en double en cas de forte concurrence. Ajout de holdlock l'astuce s'en chargera.

MERGE INTO CustomerSpend WITH (HOLDLOCK) AS T 
USING ( SELECT ? AS ID, ? AS NetValue, ? AS VoidValue ) AS V 
ON T.ID = V.ID 
WHEN MATCHED THEN 
    UPDATE SET T.ID = V.ID, T.NetValue = T.NetValue + V.NetValue, T.VoidValue = T.VoidValue + V.VoidValue 
WHEN NOT MATCHED THEN 
    INSERT ( ID,NetValue,VoidValue ) VALUES ( V.ID, V.NetValue, V.VoidValue );