首頁 >資料庫 >mysql教程 >有沒有 SQL Server 相當於 MySQL 的 ON DUPLICATE KEY UPDATE?

有沒有 SQL Server 相當於 MySQL 的 ON DUPLICATE KEY UPDATE?

Linda Hamilton
Linda Hamilton原創
2024-12-15 18:41:11401瀏覽

Is There an SQL Server Equivalent to MySQL's ON DUPLICATE KEY UPDATE?

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 語句將執行以下操作:

  • 檢查Id 為1 的行是否存在在目標表中。
  • 如果存在符合行,則將 Name 欄位更新為 John Doe。
  • 如果不存在符合的行,則插入 ID 為 1、名稱為 John Doe 的新行。

WITH (HOLDLOCK) 子句確保目標表在執行過程中被鎖定。防止並發更新導致資料一致性問題的操作。

以上是有沒有 SQL Server 相當於 MySQL 的 ON DUPLICATE KEY UPDATE?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn