首頁 > 資料庫 > mysql教程 > SQL Server 的 MERGE 語句如何模仿 MySQL 的 ON DUPLICATE KEY UPDATE?

SQL Server 的 MERGE 語句如何模仿 MySQL 的 ON DUPLICATE KEY UPDATE?

Mary-Kate Olsen
發布: 2024-12-11 12:32:10
原創
1024 人瀏覽過

How Does SQL Server's MERGE Statement Mimic MySQL's ON DUPLICATE KEY UPDATE?

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中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板