MERGE是原子的,意味着所有更改都已提交或所有更改都已回滚。
在高并发的情况下,它不能防止重复的密钥。添加
holdlock提示将解决这一问题。
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 );



