Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

T-SQL Ist es möglich, ein Update / Insert mit einer einzigen schnellen Operation durchzuführen

SQL Server 2008 und neuer haben eine MERGE-Anweisung, die genau das tut.

Siehe die MSDN Books Online-Dokumentation zu MERGE für Details.

Grundsätzlich benötigen Sie vier Dinge:

  • eine Quelle (Tabelle oder Ansicht oder Inline-SELECT-Anweisung)
  • ein Ziel
  • einen JOIN Bedingung, die die beiden verbindet
  • Anweisungen für Fälle, in denen eine ÜBEREINSTIMMUNG vorliegt (Zeilen existieren sowohl in der Quelle als auch im Ziel), NICHT ÜBEREINSTIMMT (wenn die Zeile noch nicht im Ziel vorhanden ist) und so weiter

Sie definieren also im Grunde etwas wie:

MERGE (targettable) AS t
USING (sourcetable) AS s
ON (JOIN condition between s and t)
WHEN MATCHED THEN
   UPDATE SET t.Col1 = s.Col1, t.Col2 = s.Col2 (etc.)
WHEN NOT MATCHED THEN
   INSERT(Col1, Col2, ..., ColN) VALUES(s.Col1, s.Col2, ......, s.ColN)

Dies erfolgt als eine Anweisung und wird von SQL Server hochgradig optimiert.