Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

O MERGE é uma instrução atômica no SQL2008?


MERGE é atômico significando que todas as alterações são confirmadas ou todas as alterações são revertidas.

Não previne chaves duplicadas em caso de alta simultaneidade. Adicionando holdlock dica vai cuidar disso.
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 );