SQL Server 對應MySQL 的ON DUPLICATE KEY UPDATE
在MySQL 中,ON DUPLICATE KEY UPDATE 子句允許使用者更新現有行,ON DUPLICATE KEY UPDATE 子句允許使用者更新現有行,ON而不是更新現有行。如果遇到重複的按鍵,則插入新的鍵。此功能在處理唯一約束和主鍵時特別有用。
SQL Server 的MERGE 語句
雖然SQL Server 沒有與MySQL 的ON DUPLICATE KEY 完全相同的功能更新,它確實提供了MERGE 語句作為類似的解決方案。 MERGE 將 INSERT、UPDATE 和 DELETE 語句的功能組合到單一查詢中,因此可以有效處理重複值。
使用MERGE 實作重複鍵更新
要在SQL Server 中實作重複更新行為,可以使用下列指令語法:
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:
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中文網其他相關文章!