SQL Server MERGE (Dansk)

Resume: I denne vejledning lærer du, hvordan du bruger SQL Server MERGE erklæring for at opdatere data i en tabel baseret på værdier, der matches fra en anden tabel.

Introduktion SQL Server MERGE-erklæring

Antag, du har to tabeller kaldet kilde- og måltabeller, og du skal opdater måltabellen baseret på de værdier, der matches fra kildetabellen. Der er tre tilfælde:

  1. Kildetabellen har nogle rækker, der ikke findes i måltabellen. I dette tilfælde skal du indsætte rækker i kildetabellen i måltabellen.
  2. Måltabellen har nogle rækker, der ikke findes i kildetabellen. I dette tilfælde skal du slette rækker fra måltabellen.
  3. Kildetabellen har nogle rækker med de samme nøgler som rækkerne i måltabellen. Disse rækker har dog forskellige værdier i ikke-nøglekolonnerne. I dette tilfælde skal du opdatere rækkerne i måltabellen med de værdier, der kommer fra kildetabellen.

Følgende billede illustrerer kilde- og måltabellerne med de tilsvarende handlinger: indsæt, opdater og slet:

Hvis du brug INSERT, UPDATE og DELETE udsagn individuelt, du skal konstruere tre separate udsagn for at opdatere dataene til måltabellen med de matchende rækker fra kildetabellen.

SQL Server leverer dog MERGE udsagn, der giver dig mulighed for at udføre tre handlinger på samme tid. Det følgende viser syntaksen for MERGE udsagnet:

Code language: SQL (Structured Query Language) (sql)

Først angiver du måltabellen og kilden tabel i MERGE -klausulen.

For det andet bestemmer merge_condition hvordan rækkerne fra kildetabellen matches til rækkerne fra måltabellen. Det svarer til tilslutningsbetingelsen i tilslutningsklausulen. Normalt bruger du nøglekolonnerne enten primær nøgle eller unik nøgle til matchning.

For det tredje resulterer merge_condition i tre tilstande: MATCHED, NOT MATCHED og NOT MATCHED BY SOURCE.

  • MATCHED: disse er de rækker, der matcher fletningsbetingelsen. I diagrammet vises de som blå. For de matchende rækker skal du opdatere rækkekolonnerne i måltabellen med værdier fra kildetabellen.
  • NOT MATCHED: dette er rækkerne fra kilden tabel, der ikke har nogen matchende rækker i måltabellen. I diagrammet vises de som orange. I dette tilfælde skal du tilføje rækkerne fra kildetabellen til måltabellen. Bemærk, at NOT MATCHED også er kendt som NOT MATCHED BY TARGET.
  • NOT MATCHED BY SOURCE : disse er rækkerne i måltabellen, der ikke matcher nogen rækker i kildetabellen. De vises som grønne i diagrammet. Hvis du vil synkronisere måltabellen med dataene fra kildetabellen, skal du bruge denne matchtilstand til at slette rækker fra måltabellen.

Eksempel på SQL Server MERGE-sætning

Antag, at vi har to tabeller sales.category og sales.category_staging, der gemmer salget efter produktkategori.

For at opdatere data til sales.category (måltabel) med værdierne fra sales.category_staging (kildetabel) bruger du følgende MERGE udsagn:

I dette eksempel brugte vi værdierne i category_id -kolonnerne i begge tabeller som fletningsbetingelse.

  • Først rækkerne med id 1, 3, 4 fra sales.category_staging -tabellen matcher rækkerne fra måltabellen, derfor opdateres MERGE -sætningen værdierne i kategorienavn og beløbskolonner i sales.category -tabellen.
  • For det andet findes rækken med id 5 og 6 fra sales.category_staging -tabellen ikke i tabellen sales.category, så MERGE sætningen indsætter disse rækker i måltabellen.
  • For det tredje rækken med id 2 fra sales.category -tabellen findes ikke i sales.sales_staging -tabellen, derfor findes MERGE udsagn sletter denne række.

Som et resultat af fusionen er dataene i sales.category -tabellen fuldt synkroniseret med dataene i sales.category_staging tabel.

I denne vejledning har du lært, hvordan du bruger SQL Server MERGE til at foretage ændringer i en tabel baseret på matchende værdier fra en anden tabel.

Skriv et svar

Din e-mailadresse vil ikke blive publiceret. Krævede felter er markeret med *