Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Ist MERGE eine atomare Anweisung in SQL2008?

MERGE ist atomar, was bedeutet, dass entweder alle Änderungen festgeschrieben oder alle Änderungen rückgängig gemacht werden.

Doppelte Schlüssel bei hoher Parallelität werden nicht verhindert. Hinzufügen von holdlock hint kümmert sich darum.

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