mysql - SQL Server 是否提供类似于 MySQL 的 ON DUPLICATE KEY UPDATE 的功能

标签 mysql sql-server tsql

在 MySQL 中,如果您指定 ON DUPLICATE KEY UPDATE并且插入的行会导致 UNIQUE 索引或 PRIMARY KEY 中的重复值,则执行旧行的更新。例如,如果列 a 被声明为 UNIQUE 并且包含值 1,则以下两个语句具有相同的效果:

INSERT INTO table (a,b,c) VALUES (1,2,3)
  ON DUPLICATE KEY UPDATE c=c+1;

UPDATE table SET c=c+1 WHERE a=1;

我不相信我在 T-SQL 中遇到过类似的东西。 SQL Server 是否提供与 MySQL 的 ON DUPLICATE KEY UPDATE 相当的功能?

最佳答案

令我惊讶的是,此页面上的答案都没有包含实际查询的示例,所以你去吧:

一个更复杂的插入数据然后处理重复的例子

MERGE
INTO MyBigDB.dbo.METER_DATA WITH (HOLDLOCK) AS target
USING (SELECT
    77748 AS rtu_id
   ,'12B096876' AS meter_id
   ,56112 AS meter_reading
   ,'20150602 00:20:11' AS local_time) AS source
(rtu_id, meter_id, meter_reading, time_local)
ON (target.rtu_id = source.rtu_id
  AND target.time_local = source.time_local)
WHEN MATCHED
  THEN UPDATE
      SET meter_id = '12B096876'
         ,meter_reading = 56112
WHEN NOT MATCHED
  THEN INSERT (rtu_id, meter_id, meter_reading, time_local)
      VALUES (77748, '12B096876', 56112, '20150602 00:20:11');

关于mysql - SQL Server 是否提供类似于 MySQL 的 ON DUPLICATE KEY UPDATE 的功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1197733/

相关文章:

mysql - 如果列值为 null 或为空,则在 mysql 表中搜索时忽略该列

php - codeigniter:从模型内加载变量和 View

mysql - 在mysql中按最小日期将一行转换为两行

sql - SUM SQL Select 的某些列与两个表的 UNION

sql - TABLOCKX 与 SERIALIZABLE

SQL 查询 - 从两个不同级别的层次结构中获取总和

mysql - 高级安装程序 - 如何在安装过程中创建 MySQL 用户?

sql - 组合没有唯一值的行

sql-server - 如何恢复 Azure Sql 服务器

SQL Server Geography数据类型在线上最近的点