SQL Server 是否提供類似 MySQL 的 ON DUPLICATE KEY UPDATE 的功能?
在 MySQL 中,ON DUPLICATE KEY UPDATE 允許自動更新當插入會導致唯一索引或主鍵中出現重複值時,對行進行排序。在 SQL Server 中,與此功能最接近的等效項是 MERGE 語句。
使用 MERGE 更新或插入
MERGE 語句結合了 INSERT、UPDATE、和 DELETE 語句合併為一個運算。它可用於:
範例
考慮以下查詢,該查詢嘗試在以下情況下向表中插入一行:該行尚不存在:
INSERT INTO MyTable (Id, Name) VALUES (1, 'John Doe')
如果ID 為 1 的行已存在,則此查詢將因主鍵衝突而失敗。但是,我們可以使用MERGE 來處理這種情況:
MERGE INTO MyTable WITH (HOLDLOCK) AS target USING (SELECT 1 AS Id, 'John Doe' AS Name) AS source (Id, Name) ON (target.Id = source.Id) WHEN MATCHED THEN UPDATE SET Name = source.Name WHEN NOT MATCHED THEN INSERT (Id, Name) VALUES (source.Id, source.Name);
在此範例中,MERGE 語句將執行以下操作:
WITH (HOLDLOCK) 子句確保目標表在執行過程中被鎖定。防止並發更新導致資料一致性問題的操作。
以上是有沒有 SQL Server 相當於 MySQL 的 ON DUPLICATE KEY UPDATE?的詳細內容。更多資訊請關注PHP中文網其他相關文章!