确定单个数据是按键更新还是插入的 SQL

更新页 :
页面创建日期 :

如果存在密钥,则执行“更新”,如果没有,则“插入”等操作通常基于密钥执行 Select,以确定是否存在任何内容。 此外,SQL Server 2008 添加了“合并”语句,允许单个语句执行更新和插入。 但是,这是对两个表的比较,不适合单个数据。

实际上,有一种方法可以轻松确定更新和插入并更新行,而无需在选择语句中查找计数。

update [TableName]
set [ColumnName] = @value
--    : 他更新 SQL
where [KeyColumnName] = @value
--    : 他キー比較
if @@ROWCOUNT = 0
insert into [TableName]
(
  [ColumnName]
--  : 他更新 SQL
)
values
(
  @value
--  : 他更新値
)

关键字是“@@ROWCOUNT”。 @@ROWCOUNT可以获取应用了上一个 SQL 的行数。 上述代码首先执行 Update 语句,如果更新,@@ROWCOUNT 将返回一个或多个,因此不会执行下一个插入语句。 相反,如果 Update 语句不更新一行,@@ROWCOUNT 将返回 0,因此在 IF 语句确定中执行插入。

由于上述 SQL 是模板,因此请替换及时列名称、要更新的值等。 @value 只是一个变量名称,因此请将其替换为要更新的值。