SQL Server Merge -setning

SQL Server Merge -setning

Databaser handler om CRUD -operasjoner. Vi oppretter, leser, oppdaterer og sletter data i forskjellige databasetabeller. Imidlertid krever de fleste CRUD -operasjoner i en database separat logikk for oppgaver, for eksempel å sette inn, oppdatere og slette.

Dette kan raskt bli overflødig. SQL Server gir en effektiv måte å utføre CRUD -operasjoner ved å bruke Merge -setningen. Microsoft introduserte Merge -setningen i SQL Server 2008 og over.

Denne opplæringen vil forstå hvordan du bruker SQL Server Merge -setningen for å utføre flere operasjoner i en enkelt spørring.

Det grunnleggende

La oss ta et eksempel på hvor du har to bord. Mål- og kildetabellene. Hvis du trenger å oppdatere verdiene i måltabellen basert på verdiene fra kildetabellene, kan du ta tre stier:

  1. Den første er der kilden inneholder manglende rader i måltabellen. Du trenger en innsatsoppgave til måltabellen i et slikt tilfelle.
  2. Det andre er der måltabellen inneholder manglende poster fra kildetabellen. Her trenger vi en sletterklæring for å fjerne radene fra målet.
  3. Det siste scenariet er der en post i kilde og mål har forskjellige verdier. Vi trenger en oppdateringserklæring til måltabellen i et slikt tilfelle.

For å utføre ovennevnte operasjoner individuelt, må vi lage tre separate logikk for innsats, slette og oppdatere driften. Imidlertid kan vi kombinere dem ved hjelp av Merge -setningen.

Vi kan uttrykke syntaks for sammenslåingsuttalelsen som vist:

Slå sammen målet_table ved hjelp av source_table
På betingelse av
Når matches
Deretter oppdatering_operasjon
Når du ikke er matchet - etter måltabell
Deretter innsett_operasjon
Når den ikke blir matchet etter kilde
Slett deretter;

Vi identifiserer mål- og kildetabellen og spesifiserer dem i sammenslåingsklausulen. Vi spesifiserer deretter en betingelse. Den spesifiserte tilstanden kontrollerer hvordan radene fra kildetabellen er tilpasset måltabellene. Tenk på det som en sammenføyningstilstand.

Den neste blokken inneholder handlingene som skal utføres basert på resultatet av den spesifiserte tilstanden.

Hvis tilstanden resulterer i en kamp, ​​oppdaterer vi postene i måltabellen fra kildetabellen.

Imidlertid, hvis postene er uovertruffen (fra måltabellen), setter vi inn de manglende postene i måltabellen.

Til slutt, hvis postene er uovertruffen (med måltabellen), sletter vi de uovertrufne postene fra måltabellen.

SQL Server - Fett eksempel på eksempel

La oss ta et enkelt eksempel. Anta at vi har to tabeller som inneholder produktinformasjon som Products_Target og Product_Source.

Eksempelkodebiten viser SQL -spørsmålene for å opprette og oppdatere de spesifiserte tabellene.

Bruk SalesDB;
Lag tabellprodukter_target (
PRODUKT_ID INT IKKE NULL Primær nøkkelidentitet (1,1),
produktnavn varchar (255) ikke null,
Pris desimal (10,2)
);
Sett inn Products_Target (produktnavn, pris)
Verdier ('Office Desk', 531),
('Kontorstol', 379.99),
('Vannflaske', 69.99);
Lag tabellprodukter_source (
PRODUKT_ID INT IKKE NULL Primær nøkkelidentitet (1,1),
produktnavn varchar (255) ikke null,
Pris desimal (10,2)
);
Sett inn Products_source (produktnavn, pris)
Verdier ('Office Desk', 531.00),
('Desk lampe', 50.00),
('Kontorstol', 699.99),
('Vannflaske', 89.95);

Nå har vi to bord som fungerer som et mål og kilde. Registreringene som er lagret i tabellene er som vist:

For å synkronisere dataene mellom mål- og kildetabellen, kan vi utføre en fletteforespørsel som vist i eksemplet nedenfor:

Slå sammen produkter_target som t
Bruker Products_source som s
På (s.PRODUKT_ID = T.Produkt ID)
Når matches
Oppdater deretter settet
t.produktnavn = s.Produktnavn,
t.Pris = s.pris
Når du ikke er matchet med målet
Så sett inn (produktnavn, pris)
Verdier (s.produktnavn, s.pris)
Når den ikke blir matchet etter kilde
Slett deretter;

Når vi har utført spørringen ovenfor, vil SQL -serveren utføre de spesifiserte operasjonene basert på den resulterende tilstanden.

Vi kan spørre tabellene etter fletteoperasjonen som:

Velg * fra Products_Source;
Velg * fra Products_Target;

De resulterende verdiene er som vist i eksemplet nedenfor:


Som du vil legge merke til, synkroniseres kilde- og måltabellpostene med verdiene oppdatert, satt inn og slettet.

Konklusjon

Denne guiden viser deg hvordan du jobber med SQL Server Merge -setningen. Den lar deg utføre innsats, oppdatere og slette operasjoner på tabeller basert på de resulterende forhold.

Takk for at du leser!