sql >> Base de Datos >  >> RDS >> Sqlserver

¿Es MERGE una declaración atómica en SQL2008?

MERGE es atómico, lo que significa que todos los cambios se confirman o todos los cambios se revierten.

No evita la duplicación de claves en caso de alta concurrencia. Agregando holdlock la sugerencia se encargará de eso.

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 );