SQL Server是否提供类似于MySQL的重复键更新?

MySQL中,如果指定ON DUPLICATE KEY UPDATE,并且插入的行会导致UNIQUE索引或PRIMARY KEY中出现重复值,则执行旧行的UPDATE。 例如,如果列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的DUPLICATE KEY UPDATE相媲美的function?

4 Solutions collect form web for “SQL Server是否提供类似于MySQL的重复键更新?”

没有与DUPLICATE KEY UPDATE等效的function,但MERGE和WHEN MATCHED可能适合您

使用MERGE插入,更新和删除数据

我很惊讶,没有在这个页面上的答案包含一个实际的查询的例子,所以在这里你去:

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

 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'); 

SQL Server 2008具有此function,作为TSQL的一部分。
请参阅MERGE语句的文档 – http://msdn.microsoft.com/en-us/library/bb510625.aspx

SQL Server 2000以后有一个概念,而不是触发器,它可以完成想要的function – 虽然会有一个隐藏在幕后的讨厌的触发器。

检查“插入或更新?”部分

http://msdn.microsoft.com/en-us/library/aa224818(SQL.80).aspx

  • 数据库命名约定由微软?
  • 如何使用sql从date字段按月分组
  • “COLLATE SQL_Latin1_General_CP1_CI_AS”是做什么的?
  • SQL Server中的左连接与左连接外连接
  • 如何在SQL Server中转义单引号?
  • 如何在SQL Server 2008 R2中使用CONCATfunction?
  • 脚本终止与数据库的所有连接(超过RESTRICTED_USER ROLLBACK)
  • 如何等待2秒钟
  • DateTime2与SQL Server中的DateTime
  • 用T-SQL中的单个空格replace重复的空格
  • 索引中列的顺序有多重要?