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?
没有与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