SQL Server MERGE (Svenska)
Sammanfattning: i den här handledningen lär du dig hur du använder SQL Server MERGE
uttalande för att uppdatera data i en tabell baserat på värden matchade från en annan tabell.
Introduktion SQL Server MERGE-uttalande
Antag att du har två tabeller som kallas käll- och måltabeller, och du måste uppdatera måltabellen baserat på de värden som matchas från källtabellen. Det finns tre fall:
- Källtabellen har några rader som inte finns i måltabellen. I det här fallet måste du infoga rader som finns i källtabellen i måltabellen.
- Måltabellen har några rader som inte finns i källtabellen. I det här fallet måste du radera rader från måltabellen.
- Källtabellen har några rader med samma nycklar som raderna i måltabellen. Dessa rader har dock olika värden i icke-nyckelkolumnerna. I det här fallet måste du uppdatera raderna i måltabellen med värdena som kommer från källtabellen.
Följande bild illustrerar käll- och måltabellerna med motsvarande åtgärder: infoga, uppdatera och ta bort:
Om du använd INSERT
, UPDATE
och DELETE
individuellt, du måste konstruera tre separata uttalanden för att uppdatera data till måltabellen med matchande rader från källtabellen.
SQL Server ger dock MERGE
-uttalande som gör att du kan utföra tre åtgärder samtidigt. Följande visar syntax för MERGE
uttalande:
Code language: SQL (Structured Query Language) (sql)
Först anger du måltabellen och källan tabell i MERGE
-satsen.
För det andra bestämmer merge_condition
hur raderna från källtabellen matchas till raderna från måltabellen. Det liknar anslutningsvillkoret i anslutningsklausulen. Vanligtvis använder du nyckelkolumnerna antingen primär nyckel eller unik nyckel för matchning.
För det tredje resulterar merge_condition
i tre tillstånd: MATCHED
, NOT MATCHED
och NOT MATCHED BY SOURCE
.
-
MATCHED
: det här är de rader som matchar sammanslagningsvillkoret. I diagrammet visas de som blå. För matchande rader måste du uppdatera raderna i måltabellen med värden från källtabellen. -
NOT MATCHED
: det här är raderna från källan tabell som inte har några matchande rader i måltabellen. I diagrammet visas de som orange. I det här fallet måste du lägga till raderna från källtabellen till måltabellen. Observera attNOT MATCHED
också kallasNOT MATCHED BY TARGET
. -
NOT MATCHED BY SOURCE
: det här är raderna i måltabellen som inte matchar några rader i källtabellen. De visas som gröna i diagrammet. Om du vill synkronisera måltabellen med data från källtabellen måste du använda detta matchningsvillkor för att radera rader från måltabellen.
Exempel på SQL Server MERGE-uttalande
Antag att vi har två tabeller sales.category
och sales.category_staging
som lagrar försäljningen efter produktkategori.
För att uppdatera data till sales.category
(måltabell) med värdena från sales.category_staging
(källtabell) använder du följande MERGE
uttalande:
I det här exemplet använde vi värdena i kolumnerna category_id
i båda tabellerna.
- Först raderna med id 1, 3, 4 från
sales.category_staging
tabellen matchar med raderna från måltabellen, därför
uttalandet uppdaterar värdena i kategorinamn och antal kolumner i tabellen sales.category
.
sales.category_staging
-tabellen i tabellen sales.category
, så sätter MERGE
dessa rader i måltabellen. sales.category
tabellen finns inte i tabellen sales.sales_staging
, därför finns MERGE
uttalande raderar denna rad. Som ett resultat av sammanslagningen är uppgifterna i sales.category
-tabellen helt synkroniserad med data i sales.category_staging
tabell.
I denna handledning har du lärt dig hur du använder SQL Server MERGE
för att göra ändringar i en tabell baserad på matchande värden från en annan tabell.