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 MATCHEDockså 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_stagingtabellen 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.