ホームページ >データベース >mysql チュートリアル >MySQL の ON DUPLICATE KEY UPDATE に相当する SQL Server はありますか?

MySQL の ON DUPLICATE KEY UPDATE に相当する SQL Server はありますか?

Linda Hamilton
Linda Hamiltonオリジナル
2024-12-15 18:41:11403ブラウズ

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 ステートメントを 1 つの操作にまとめます。これは次の目的で使用できます。

  • 指定した条件に一致する既存の行を更新
  • 一致する行が見つからない場合は新しい行を挿入

テーブルに行を挿入しようとする次のクエリについて考えてみましょう。行がまだ存在しない場合:

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) 句により、ターゲット テーブルが実行中に確実にロックされます。同時更新によるデータ整合性の問題の発生を防ぐための操作。

以上がMySQL の ON DUPLICATE KEY UPDATE に相当する SQL Server はありますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。