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:

  1. 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.
  2. 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.
  3. 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 att NOT MATCHED också kallas NOT 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.

  • För det andra finns inte raderna med id 5 och 6 från sales.category_staging -tabellen i tabellen sales.category, så sätter MERGE dessa rader i måltabellen.
  • För det tredje raden med id 2 från 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.

    Lämna ett svar

    Din e-postadress kommer inte publiceras. Obligatoriska fält är märkta *