SQL Server MERGE (Norsk)
Sammendrag: i denne opplæringen lærer du hvordan du bruker SQL Server MERGE
uttalelse for å oppdatere data i en tabell basert på verdier som samsvarer med en annen tabell.
Innledning SQL Server MERGE Statement
Anta at du har to tabeller kalt kilde- og måltabeller, og du må oppdater måltabellen basert på verdiene som samsvarer fra kildetabellen. Det er tre tilfeller:
- Kildetabellen har noen rader som ikke finnes i måltabellen. I dette tilfellet må du sette inn rader som er i kildetabellen i måltabellen.
- Måletabellen har noen rader som ikke finnes i kildetabellen. I dette tilfellet må du slette rader fra måltabellen.
- Kildetabellen har noen rader med samme nøkler som radene i måltabellen. Imidlertid har disse radene forskjellige verdier i kolonnene som ikke er nøkkel. I dette tilfellet må du oppdatere radene i måltabellen med verdiene som kommer fra kildetabellen.
Følgende bilde illustrerer kilde- og måltabellene med tilhørende handlinger: sett inn, oppdater og slett:
Hvis du bruk INSERT
, UPDATE
, og DELETE
utsagnet hver for seg, du må konstruere tre separate uttalelser for å oppdatere dataene til måltabellen med de samsvarende radene fra kildetabellen.
SQL Server gir imidlertid MERGE
-uttalelsen som lar deg utføre tre handlinger samtidig. Følgende viser syntaksen til MERGE
utsagnet:
Code language: SQL (Structured Query Language) (sql)
Først angir du måltabellen og kilden tabell i MERGE
-klausulen.
For det andre bestemmer merge_condition
hvordan radene fra kildetabellen matches med radene fra måltabellen. Det ligner på foreningsbetingelsen i sammenføyningsparagrafen. Vanligvis bruker du nøkkelkolonnene enten primærnøkkel eller unik nøkkel for å matche.
For det tredje resulterer merge_condition
i tre tilstander: MATCHED
, NOT MATCHED
, og NOT MATCHED BY SOURCE
.
-
MATCHED
: dette er radene som samsvarer med sammenslåingsbetingelsen. I diagrammet er de vist som blå. For de samsvarende radene må du oppdatere radkolonnene i måltabellen med verdier fra kildetabellen. -
NOT MATCHED
: dette er radene fra kilden tabell som ikke har noen samsvarende rader i måltabellen. I diagrammet er de vist som oransje. I dette tilfellet må du legge til radene fra kildetabellen til måltabellen. Merk atNOT MATCHED
også er kjent somNOT MATCHED BY TARGET
. -
NOT MATCHED BY SOURCE
: dette er radene i måltabellen som ikke samsvarer med noen rader i kildetabellen. De vises som grønne i diagrammet. Hvis du vil synkronisere måltabellen med dataene fra kildetabellen, må du bruke denne samsvarsbetingelsen for å slette rader fra måltabellen.
SQL Server MERGE-setningseksempel
Anta at vi har to tabeller sales.category
og sales.category_staging
som lagrer salget etter produktkategori.
For å oppdatere data til sales.category
(måltabell) med verdiene fra sales.category_staging
(kildetabell), bruker du følgende MERGE
uttalelse:
I dette eksemplet brukte vi verdiene i category_id
-kolonnene i begge tabellene som fletttilstand.
- Først skal radene med id 1, 3, 4 fra
sales.category_staging
-tabellen samsvarer med radene fra måltabellen, derfor <
utsagnet oppdaterer verdiene i kategorienavn og mengdekolonner i sales.category
tabellen.
sales.category_staging
tabellen i sales.category
tabellen, slik at MERGE
setningen setter inn disse radene i måltabellen. sales.category
tabellen eksisterer ikke i sales.sales_staging
tabellen, derfor MERGE
statement sletter denne raden. Som et resultat av sammenslåingen blir dataene i sales.category
-tabellen fullt synkronisert med dataene i sales.category_staging
tabell.
I denne veiledningen har du lært hvordan du bruker SQL Server MERGE
uttalelse for å gjøre endringer i en tabell basert på samsvarende verdier fra en annen tabell.