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 MATCHEDogså 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.