Heim >Datenbank >MySQL-Tutorial >Gibt es ein SQL Server-Äquivalent zum ON DUPLICATE KEY UPDATE von MySQL?

Gibt es ein SQL Server-Äquivalent zum ON DUPLICATE KEY UPDATE von MySQL?

Linda Hamilton
Linda HamiltonOriginal
2024-12-15 18:41:11403Durchsuche

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

Bietet SQL Server eine ähnliche Funktion wie MySQLs ON DUPLICATE KEY UPDATE?

In MySQL ermöglicht ON DUPLICATE KEY UPDATE die automatische Aktualisierung einer Zeile, wenn eine Einfügung zu einem doppelten Wert in einem eindeutigen Index oder Primärschlüssel führen würde. In SQL Server ist die MERGE-Anweisung das nächste Äquivalent zu dieser Funktion.

Verwenden von MERGE zum Aktualisieren oder Einfügen

Die MERGE-Anweisung kombiniert die Funktionalität von INSERT, UPDATE, und DELETE-Anweisungen in einer einzigen Operation. Es kann verwendet werden, um:

  • vorhandene Zeilen zu aktualisieren, die einer bestimmten Bedingung entsprechen
  • Neue Zeilen einzufügen, wenn keine passenden Zeilen gefunden werden

Beispiel

Betrachten Sie die folgende Abfrage, die versucht, eine Zeile in eine Tabelle einzufügen, wenn die Zeile existiert noch nicht:

INSERT INTO MyTable (Id, Name) VALUES (1, 'John Doe')

Wenn eine Zeile mit der ID 1 bereits existiert, schlägt diese Abfrage aufgrund einer Primärschlüsselverletzung fehl. Wir können jedoch MERGE verwenden, um dieses Szenario zu bewältigen:

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

In diesem Beispiel führt die MERGE-Anweisung die folgenden Aktionen aus:

  • Überprüfen Sie, ob eine Zeile mit der ID 1 vorhanden ist in der Zieltabelle.
  • Wenn eine übereinstimmende Zeile vorhanden ist, aktualisieren Sie die Spalte „Name“ auf „John Doe“.
  • Wenn keine übereinstimmende Zeile vorhanden ist existiert, fügen Sie eine neue Zeile mit der ID 1 und dem Namen John Doe ein.

Die WITH (HOLDLOCK)-Klausel stellt sicher, dass die Zieltabelle während des Vorgangs gesperrt ist, um zu verhindern, dass gleichzeitige Aktualisierungen Datenkonsistenzprobleme verursachen.

Das obige ist der detaillierte Inhalt vonGibt es ein SQL Server-Äquivalent zum ON DUPLICATE KEY UPDATE von MySQL?. 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