【发布时间】:2016-07-06 08:56:34
【问题描述】:
假设表结构为 MyTable(MyTableId NVARCHAR(MAX) PRIMARY KEY, NumberOfInserts INTEGER)。
我经常需要更新,即增加现有记录的计数器,或者插入新记录(如果 NumberOfInserts 的值为 0)不存在。
基本上:
IF (MyTableId exists)
run UPDATE command
ELSE
run INSERT command
我担心由于竞争条件等而丢失数据。
写这个最安全的方法是什么?
如果可能的话,我需要它是 100% 准确的,并且愿意在必要时牺牲速度。
【问题讨论】:
-
您可以考虑使用 MERGE 命令,它同时结合了更新、插入和删除。有几个观察,请不要将该列称为“键”,它是 SQL Server 中的保留字。另外,您是否将其用作主键?如果是这样,NVARCHAR(MAX) 是一个非常糟糕的主意。
标签: sql sql-server sql-server-2016