ホームページ >データベース >mysql チュートリアル >SQL Server の MERGE ステートメントは MySQL の ON DUPLICATE KEY UPDATE とどう違うのですか?
SQL Server の MERGE ステートメント: MySQL の ON DUPLICATE KEY UPDATE の多用途な代替手段
MySQL では、ON DUPLICATE KEY UPDATE 句により、 UNIQUE インデックスを持つテーブルにデータを挿入するときの既存の行の変更、または主キー。 SQL Server にはまったく同等のものはありませんが、MERGE ステートメントは、重複データを処理するための強力かつ柔軟なソリューションを提供します。
MERGE ステートメントの紹介
MERGE ステートメントは、次のことを組み合わせたものです。 INSERT ステートメントと UPDATE ステートメントの機能を 1 つの操作に統合します。指定された条件を評価して、新しい行を挿入するか既存の行を更新するかを決定します。基本的な MERGE ステートメントの構文は次のとおりです。
MERGE INTO target_table AS target USING source_table AS source ON (target.column_name = source.column_name) WHEN MATCHED THEN UPDATE SET target.column_name = source.column_name WHEN NOT MATCHED THEN INSERT (target.column_names) VALUES (source.column_values)
使用例
重複データを処理するための MERGE ステートメントの使用法を説明するために、次の例を考えてみましょう。
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');
この例では、MERGE ステートメントは新しい行をソーステーブルのデータを使用する MyBigDB.dbo.METER_DATA テーブル。同じ rtu_id と time_local 値を持つ行がすでに存在する場合、ステートメントは指定された meter_id と meter_reading の値でその行を更新します。それ以外の場合、ステートメントはテーブルに新しい行を挿入します。
MERGE ステートメントの利点
MySQL の ON DUPLICATE KEY UPDATE 句よりも、SQL の MERGE ステートメントサーバーはいくつかの機能を提供します利点:
以上がSQL Server の MERGE ステートメントは MySQL の ON DUPLICATE KEY UPDATE とどう違うのですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。