ホームページ >データベース >mysql チュートリアル >SQL Server の MERGE ステートメントは MySQL の ON DUPLICATE KEY UPDATE をどのように模倣するのでしょうか?

SQL Server の MERGE ステートメントは MySQL の ON DUPLICATE KEY UPDATE をどのように模倣するのでしょうか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-12-11 12:32:10926ブラウズ

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 句を使用すると、ユーザーは代わりに既存の行を更新できます。重複キーが見つかった場合は、新しいキーを挿入します。この機能は、一意制約と主キーを処理する場合に特に役立ちます。

SQL Server の MERGE ステートメント

SQL Server には、MySQL の ON DUPLICATE KEY とまったく同等のものはありません。 UPDATE では、同等のソリューションとして MERGE ステートメントが提供されます。 MERGE は、INSERT、UPDATE、DELETE ステートメントの機能を 1 つのクエリに結合し、重複する値を効率的に処理できるようにします。

MERGE を使用した ON DUPLICATE KEY UPDATE の実装

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 中国語 Web サイトの他の関連記事を参照してください。

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