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:

  1. 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.
  2. Måletabellen har noen rader som ikke finnes i kildetabellen. I dette tilfellet må du slette rader fra måltabellen.
  3. 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 at NOT MATCHED også er kjent som NOT 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.

  • For det andre eksisterer ikke radene med id 5 og 6 fra sales.category_staging tabellen i sales.category tabellen, slik at MERGE setningen setter inn disse radene i måltabellen.
  • For det tredje raden med id 2 fra 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.

    Legg igjen en kommentar

    Din e-postadresse vil ikke bli publisert. Obligatoriske felt er merket med *