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:
- 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.
- Måltabellen har nogle rækker, der ikke findes i kildetabellen. I dette tilfælde skal du slette rækker fra måltabellen.
- 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, atNOT MATCHED
også er kendt somNOT 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 opdateresMERGE
-sætningen værdierne i kategorienavn og beløbskolonner isales.category
-tabellen. - For det andet findes rækken med id 5 og 6 fra
sales.category_staging
-tabellen ikke i tabellensales.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 isales.sales_staging
-tabellen, derfor findesMERGE
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.