MERGE
là nguyên tử có nghĩa là tất cả các thay đổi được cam kết hoặc tất cả các thay đổi được khôi phục lại.
Nó không ngăn chặn các khóa trùng lặp trong trường hợp đồng thời cao. Thêm holdlock
gợi ý sẽ giải quyết vấn đề đó.
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 );