Heim >Datenbank >MySQL-Tutorial >Wie ahmt die MERGE-Anweisung von SQL Server die ON DUPLICATE KEY UPDATE von MySQL nach?

Wie ahmt die MERGE-Anweisung von SQL Server die ON DUPLICATE KEY UPDATE von MySQL nach?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-12-11 12:32:10924Durchsuche

How Does SQL Server's MERGE Statement Mimic MySQL's ON DUPLICATE KEY UPDATE?

Das Gegenstück von SQL Server zu MySQLs ON DUPLICATE KEY UPDATE

In MySQL ermöglicht die ON DUPLICATE KEY UPDATE-Klausel Benutzern das Aktualisieren vorhandener Zeilen statt Einfügen neuer, wenn ein doppelter Schlüssel gefunden wird. Diese Funktion ist besonders nützlich, wenn es um eindeutige Einschränkungen und Primärschlüssel geht.

MERGE-Anweisung von SQL Server

Während SQL Server kein exaktes Äquivalent zu MySQLs ON DUPLICATE KEY hat UPDATE, es bietet die MERGE-Anweisung als vergleichbare Lösung. MERGE kombiniert die Funktionalität von INSERT-, UPDATE- und DELETE-Anweisungen in einer einzigen Abfrage und ermöglicht so eine effiziente Verarbeitung doppelter Werte.

Implementierung von ON DUPLICATE KEY UPDATE mit MERGE

Um das On-Duplicate-Update-Verhalten in SQL Server zu implementieren, können Sie Folgendes verwenden Syntax:

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]);

Beispiel

Betrachten Sie die folgende Abfrage, die Daten in eine Tabelle mit dem Namen METER_DATA einfügt und Zeilenwerte aktualisiert, wenn basierend auf rtu_id und time_local ein Duplikat vorhanden ist Spalten:

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');

Diese Abfrage fügt die Werte aus der Quelltabelle in die Zieltabelle ein, wenn eine Zeile mit die gleiche rtu_id und time_local existiert noch nicht. Wenn eine doppelte Zeile vorhanden ist, wird stattdessen die Aktualisierung durchgeführt, wobei die vorhandenen Daten in der Zieltabelle erhalten bleiben.

Das obige ist der detaillierte Inhalt vonWie ahmt die MERGE-Anweisung von SQL Server die ON DUPLICATE KEY UPDATE von MySQL nach?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn