SQL Server 对应 MySQL 的 ON DUPLICATE KEY UPDATE
在 MySQL 中,ON DUPLICATE KEY UPDATE 子句允许用户更新现有行,而不是更新现有行。如果遇到重复的键,则插入新的键。此功能在处理唯一约束和主键时特别有用。
SQL Server 的 MERGE 语句
虽然 SQL Server 没有与 MySQL 的 ON DUPLICATE KEY 完全相同的功能更新,它确实提供了 MERGE 语句作为类似的解决方案。 MERGE 将 INSERT、UPDATE 和 DELETE 语句的功能组合到单个查询中,从而可以有效处理重复值。
使用 MERGE 实现重复键更新
要在 SQL Server 中实现重复更新行为,可以使用以下命令语法:
1 2 3 4 5 6 7 | MERGE INTO [target_table] AS target
USING [source_table] AS source
ON (target.[matching_column] = source.[matching_column])
WHEN MATCHED THEN
UPDATE SET [target_column] = [source_column]
WHEN NOT MATCHED THEN
INSERT ([target_column]) VALUES ([source_column]);
|
登录后复制
示例
考虑以下查询,该查询将数据插入名为 METER_DATA 的表中,并根据 rtu_id 和 time_local 更新行值(如果存在重复项) columns:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | 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 time_local
) 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' );
|
登录后复制
此查询会将源表中的值插入到目标表中如果具有相同 rtu_id 和 time_local 的行尚不存在。如果确实存在重复行,则会执行更新,保留目标表中的现有数据。
以上是SQL Server 的 MERGE 语句如何模仿 MySQL 的 ON DUPLICATE KEY UPDATE?的详细内容。更多信息请关注PHP中文网其他相关文章!