- 20.8.2019
- 25 minuuttia aikaa lukea
-
- X
- c
- j
- r
- a
-
+18
Koskee: SQL Server (kaikki tuetut versiot) Azure SQL -tietokanta Azure Synapse Analytics
Suorittaa kohdetaulukon lisäys-, päivitys- tai poistotoimet lähdetaulukon yhdistämisen tulokset. Synkronoi esimerkiksi kaksi taulukkoa lisäämällä, päivittämällä tai poistamalla rivejä yhteen taulukkoon toisessa taulukossa havaittujen erojen perusteella.
Huomaa
MERGE on tällä hetkellä esikatselu Azure Synapse Analytics.
Suoritusvinkki: MERGE-käskylle kuvattu ehdollinen toiminta toimii parhaiten, kun kahdessa taulukossa on monimutkainen yhdistelmä vastaavia ominaisuuksia. Esimerkiksi rivin lisääminen, jos sitä ei ole, tai rivin päivittäminen, jos se vastaa. Kun yksinkertaisesti päivität yhtä taulukkoa toisen taulukon rivien perusteella, paranna suorituskykyä ja skaalautuvuutta perusasetuksilla INSERT, UPDATE ja DELETE. esimerkki:
Transact-SQL-syntaksin yleissopimukset
Syntaksi
Huomautus
Jos haluat tarkastella SQL Server 2014: n ja sitä vanhempien Transact-SQL-syntaksia, katso edellisten versioiden ohjeet.
Argumentit
WITH < common_table_expression >
Määrittää väliaikaisen nimetyn tulosjoukon tai näkymän, joka tunnetaan myös nimellä yleinen taulukkoilmaisu, joka määritellään MERGE-lausunnon soveltamisalaan. Tulosjoukko on peräisin yksinkertaisesta kyselystä ja siihen viittaa MERGE-käsky. Lisätietoja on ohjeaiheessa common_table_expression (Transact-SQL).
TOP (lauseke)
Määrittää kyseisten rivien määrän tai prosenttiosuuden. lauseke voi olla joko luku tai prosenttiosuus riveistä. TOP-lausekkeessa viitattuja rivejä ei ole järjestetty mihinkään järjestykseen. Lisätietoja on ohjeaiheessa TOP (Transact-SQL).
TOP-lauseketta sovelletaan, kun koko lähdetaulukko ja koko kohdetaulukko ovat liittyneet ja yhdistetyt rivit, jotka eivät täytä lisäystä, päivitystä tai poistotoiminto poistetaan. TOP-lause vähentää edelleen yhdistettyjen rivien määrää määritettyyn arvoon. Lisää, päivitä tai poista toiminnot koskevat jäljellä olevia yhdistettyjä rivejä järjestämättömällä tavalla. Eli ei ole järjestystä, jossa rivit jaetaan WHEN-lausekkeissa määriteltyjen toimien kesken. Esimerkiksi TOP (10) -määrittely vaikuttaa 10 riviin. Näistä riveistä 7 voidaan päivittää ja 3 lisätä tai 1 voidaan poistaa, 5 päivitetty ja 4 lisätä jne.
Koska MERGE-käsky skannaa sekä lähteen että kohdetaulukoihin, I / O-suorituskykyyn joskus vaikuttaa, kun käytetään TOP-lauseketta suuren taulukon muokkaamiseen luomalla useita eriä. Tässä skenaariossa on tärkeää varmistaa, että kaikki peräkkäiset erät kohdistuvat uusiin riveihin.
database_name
Tietokannan nimi, jossa target_table sijaitsee.
schema_name
Sen skeeman nimi, johon target_table kuuluu.
target_table
Taulukko tai näkymä, jota vastaan tiedot rivittyvät kohdasta < table_source > sovitetaan < clause_search_condition > perusteella. target_table on minkä tahansa lisäys-, päivitys- tai poistotoiminnon kohde määritetään MERGE-käskyn WHEN lausekkeissa.
Jos target_table on näkymä, sitä vastaan tehtävien toimien on täytettävä näkymien päivittämisen ehdot. Lisätietoja on kohdassa Tietojen muokkaaminen näkymän kautta.
target_table ei voi olla etätaulukko. target_table-taulukossa ei voi olla määritelty mitään sääntöjä.
table_alias
Vaihtoehtoinen nimi viitataulukkoan target_table-taulukkoa varten.
< taulukon_lähde >
Määrittää tietolähteen, joka täsmää kohteen_taulukko tietoriveihin < yhdistämishakutieto >. Tämän ottelun tulos sanelee MITEN lausunnon MITEN lausekkeessa toteutettavat toimet. < table_source > voi olla etätaulukko tai johdettu taulukko, joka käyttää etätaulukoita.
< table_source > voi olla johdettu taulukko, joka käyttää Transact-SQL-taulukon arvonrakentajaa rakentamaan taulukon määrittämällä useita rivejä.
table_alias
Vaihtoehtoinen nimi table_source-taulukon viittaamiseen.
Lisätietoja tämän lauseen syntaksista ja argumenteista on kohdassa FROM (Transact-SQL).
ON < merge_search_condition >
Määrittää ehdot, joissa < table_source > yhdistetään target_table-sovellukseen ja selvitetään, mihin ne sopivat.
Varoitus
On tärkeää määrittää vain kohdetaulukon sarakkeet, joita käytetään vastaavuustarkoituksiin. Toisin sanoen määritä kohdetaulukon sarakkeet, joita verrataan lähdetaulukon vastaavaan sarakkeeseen. Älä yritä parantaa kyselyn suorituskykyä suodattamalla kohdetaulukon rivit ON-lauseke; esimerkiksi esimerkiksi määrittelemällä AND NOT target_table.column_x = value
. Näin tekemällä saatat saada odottamattomia ja virheellisiä tuloksia.
SEN KOKOONNITTUESSA < merge_matched >
Määrittää, että kaikki * target_table-rivit, jotka vastaavat < table_source > ON < merge_search_condition > ja täyttävät mahdolliset muut hakuehdot, joko päivitetään tai poistetaan < merge_matched -lauseke.
Yhdistämislausekkeessa voi olla korkeintaan kaksi LASKETTA-lausetta. Jos määritetään kaksi lausetta, ensimmäisen lauseen mukana on oltava AND < search_condition > -lauseke. Millä tahansa rivillä toista KUN VASTATTU -lauseketta sovelletaan vain, jos ensimmäinen ei ole ”t”. Jos MITEN VASTAANOTETTU -lausekkeita on kaksi, on määritettävä UPDATE-toiminto ja yksi on poistettava. Kun UPDATE on määritetty < merge_matched > -lauseke ja useampi kuin yksi rivi < table_source > vastaa riviä kohdetaulukossa < merge_search_condition > perusteella, SQL Server palauttaa virheen. Yhdistämislauseke voi” t päivitä sama rivi useammin kuin kerran tai päivitä ja poista sama rivi.
KUN SITÄ EI OLE SITÄ < merge_not_matched >
Määrittää, että rivi lisätään kohdetaulukkoon jokaiselle riville, jonka < table_source > ON merge_search_condition > joka ei vastaa riviä targissa et_table, mutta täyttää ylimääräisen hakuehdon, jos sellainen on. Lisättävät arvot määritetään lausekkeella < merge_not_matched >. Yhdistämislausekkeella voi olla vain yksi lause, KUN EI VASTAA.
KUN SITÄ EI OLE LÄHTEEN SITÄ < merge_matched >
Määrittää, että kaikki * target_table-rivit, jotka eivät vastaa < table_source > ON < merge_search_condition > ja jotka täyttävät kaikki muut hakusehdot, päivitetään tai poistetaan < yhdistämisen_matched mukaisesti > -lauseke.
Yhdistämislausekkeessa voi olla enintään kaksi lausetta, JOS SITÄ EI OLE LÄHTEEN Lauseke. Jos määritetään kaksi lausetta, ensimmäisen lauseen mukana on oltava AND < clause_search_condition > -lauseke. Kullekin tietylle riville, toista, KUN EI LÄHDE LÄHDE, lauseketta käytetään vain, jos ensimmäinen ei ole ” t. Jos on kaksi lauseketta, JOIHIN EI VASTAA LÄHDE-lauseketta, on määritettävä UPDATE-toiminto ja yksi on DELETE-toiminto. Vain kohdetaulukon sarakkeisiin voidaan viitata kohdassa < clause_search_condition >.
Kun < table_source >, lähdetaulukon sarakkeisiin ei pääse. Jos merge_matched > -lause viittaa lähdetaulukon sarakkeisiin, virhe 207 (virheellinen sarakkeen nimi) palautetaan. Esimerkiksi lauseke WHEN NOT MATCHED BY SOURCE THEN UPDATE SET TargetTable.Col1 = SourceTable.Col1
voi aiheuttaa käskyn epäonnistumisen, koska lähdetaulukon Col1
ei ole käytettävissä.
JA < clause_search_condition >
Määrittää kelvolliset hakuehdot. Lisätietoja on kohdassa Hakusehto (Transact-SQL).
< table_hint_limited >
Määrittää yhden tai useamman taulukon vihjeen, joita sovelletaan kohdetaulukkoon jokaiselle e lisää, päivitä tai poista MERGE-käskyn tekemät toiminnot. WITH-avainsana ja sulkeet vaaditaan.
NOLOCK ja READUNCOMMITTED eivät ole sallittuja. Lisätietoja taulukon vihjeistä on taulukon vihjeissä (Transact-SQL).
TABLOCK-vihjeen määrittäminen taulukolle, joka on INSERT-käskyn kohde, vaikuttaa samalla tavalla kuin TABLOCKX-vihje. Pöydälle on varattu lukko. Kun FORCESEEK on määritetty, se koskee lähdetaulukkoon liitetyn kohdetaulukon implisiittinen ilmentymä.
Varoitus
READPAST-asetuksen määrittäminen, kun EI OLE SITTYVÄT SITÄ INSERT, voi johtaa INSERT-toimintoihin, jotka rikkovat UNIQUE-rajoituksia.
INDEX (index_val)
Määrittää yhden tai useamman kohdetaulukon indeksin nimen tai tunnuksen implisiittisen liitoksen tekemiseen lähdetaulukon kanssa. Lisätietoja on taulukon vihjeissä (Transact -SQL).
< output_clause >
Palauttaa rivin jokaiselle riville target_table-taulukossa, joka s päivitetty, lisätty tai poistettu missään erityisessä järjestyksessä. $ -toiminto voidaan määrittää lähtölausekkeessa. $ action on sarake, jonka tyyppi on nvarchar (10), joka palauttaa jokaiselle riville yhden kolmesta arvosta: ”INSERT”, ”UPDATE” tai ”DELETE” riville tehdyn toiminnon mukaan. Lisätietoja tämän lauseen argumenteista ja toiminnasta, katso OUTPUT-lause (Transact-SQL).
< merge_matched >
Määrittää päivitys- tai poistotoiminnon, jota sovelletaan kaikkiin target_table-riveihin, jotka eivät vastaa < table_source ON < merge_search_condition > ja jotka täyttävät mahdolliset muut hakuehdot.
UPDATE SET < set_clause >
Määrittää luettelon päivitettävistä sarake- tai muuttujien nimitauluista taulukossa ja arvot, joilla ne päivitetään.
Lisätietoja tämän lausekkeen argumenteista on artikkelissa UPDATE (Transact-SQL). Muuttujan asettaminen samalle arvolle kuin sarake ei ole tuettu.
POISTA
Määrittää, että target_table-taulukon rivejä vastaavat rivit poistetaan.
< merge_not_matched >
Määrittää kohdetaulukkoon lisättävät arvot.
(column_list)
Yhden tai useamman luettelo lisää kohdetaulukon sarakkeita, joihin tietoja lisätään. Sarakkeet on määritettävä yksiosaisina niminä, muuten MERGE-käsky epäonnistuu. Sarakeluettelo on suljettava sulkuihin ja erotettava pilkuilla.
VALUES ( arvolista)
Pilkulla erotettu luettelo vakioista, muuttujista tai lausekkeista, jotka palauttavat arvot kohdetaulukkoon. Lausekkeet eivät voi sisältää EXECUTE-käskyä.
OLETUSARVOT
Pakottaa lisätty rivi sisältää kullekin sarakkeelle määritetyt oletusarvot.
Lisätietoja tästä lauseesta on kohdassa INSERT (Transact-SQL).
< search_condition >
Tiedot peittää hakuehdot määrittääkseen < merge_search_condition > tai < clause_search_condition >. Lisätietoja tämän lausekkeen argumenteista on artikkelissa Hakusehto (Transact-SQL).
< kuvaajan hakumalli >
Määrittää kuvaajan osumakuvion. Lisätietoja tämän lausekkeen argumenteista on artikkelissa MATCH (Transact-SQL)
Huomautuksia
Huomautus
Azure Synapse Analyticsissa MERGE komennolla (esikatselu) on seuraavat erot verrattuna SQL-palvelimeen ja Azure SQL -tietokantaan.
- Yhdistämispäivitys toteutetaan poisto- ja lisäysparina. MERGE-päivityksen vaikutus rivien määrään sisältää poistetut ja lisätyt rivit.
- Esikatselun aikana Synapse SQL MERGE -komento ei tue identiteettisaraketta sisältäviä taulukoita.
- taulukot, joilla on erilainen jakelutyyppi, on kuvattu tässä taulukossa:
SULAUTUMISLAUSEKE Azure Synapse Analyticsissa Tuettu TARGE-jakelutaulukko Tuettu SOURCE-jakelutaulukko Kommentoi ASETETTUESSA Kaikki jakelutyypit Kaikki jakelutyypit EI OLE TAVOITETTU HASH Kaikki jakelutyypit Synkronoi kaksi taulukkoa käyttämällä UPDATE / DELETE FROM… JOIN. EI OLE LÄHDE Kaikki jakelutyypit Kaikki jakelutyypit
Ainakin yksi kolmesta MATCHED-lauseesta on määritettävä, mutta ne voidaan määrittää missä tahansa järjestyksessä. Muuttujaa ei voi päivittää useammin kuin kerran samassa MATCHED-lauseessa.
Kaikkia MERGE-käskyllä kohdetaulukossa määritettyjä lisäys-, päivitys- tai poistotoimintoja rajoittavat kaikki siinä määritellyt rajoitukset, mukaan lukien kaikki vaiheittain viitteelliset eheysrajoitukset. Jos IGNORE_DUP_KEY on PÄÄLLÄ kaikilla kohdetaulukon ainutlaatuisilla hakemistoilla, MERGE ohittaa tämän asetuksen.
MERGE-käsky vaatii puolipisteen (;) lausekkeen päätteeksi. Virhe 10713 herätetään, kun MERGE-käsky suoritetaan ilman pääteosoitinta.
Kun käytetään MERGE: n jälkeen, @@ ROWCOUNT (Transact-SQL) palauttaa lisättyjen, päivitettyjen ja poistettujen rivien kokonaismäärän asiakkaalle.
MERGE on täysin varattu avainsana, kun tietokannan yhteensopivuustasoksi on asetettu 100 tai korkeampi. MERGE-käsky on saatavana sekä 90 että 100 tietokannan yhteensopivuustasolla Avainsana ei kuitenkaan ole täysin varattu, kun tietokannan yhteensopivuustasoksi on asetettu 90.
Älä käytä MERGE-käskyä, kun käytät jonossa olevaa päivitettävää replikointia. Yhdistäminen ja jonossa oleva päivitysliipaisin eivät ole yhteensopivia. Korvaa MERGE-käsky insertillä tai päivityslausekkeella.
Trigger Implementation
Jokaiselle kohdassa määritetylle lisäykselle, päivitykselle tai poistamiselle MERGE-käskyn SQL Server käynnistää kaikki vastaavat taulukossa määritetyt AFTER-laukaisimet, mutta ei takaa, mikä käynnistettävä toiminto käynnistyy ensin vai viimeisenä. Samalle toiminnolle määritetyt käynnistimet noudattavat määrittämääsi järjestystä. Lisätietoja liipaisimen käynnistysjärjestyksen asettamisesta on kohdassa Määritä ensimmäiset ja viimeiset laukaisimet.
Jos kohdetaulukossa on määritetty käyttöönotettu INSTEAD OF -liipaisin MERGE-käskyn tekemälle lisäys-, päivitys- tai poistotoiminnolle. , sillä on oltava käytössä INSTEAD OF -liipaisin kaikille MERGE-käskyssä määritetyille toiminnoille.
Jos jokin INSTEAD OF UPDATE- tai INSTEAD OF DELETE-triggeri on määritetty target_table-taulukossa, päivitys- tai poistotoimintoja ei ”t Sen sijaan liipaisimet käynnistyvät ja lisätyt ja poistetut taulukot täyttyvät vastaavasti.
Jos target_table-taulukossa on määritetty INSTE IN INS-liipaisimia, lisäysoperaatiota ei suoriteta. Sen sijaan taulukko täyttyy vastaavasti.
Käyttöoikeudet
Edellyttää SELECT-oikeutta lähdetaulukossa ja INSERT-, UPDATE- tai DELETE-käyttöoikeuksia kohdetaulukossa. Lisätietoja on artikkelien SELECT-, INSERT-, UPDATE- ja DELETE-käyttöoikeuksien osassa.
MERGE-lauseen suorituskyvyn optimointi
MERGE-käskyä käyttämällä voit korvata yksittäisen DML: n. lausunnot yhdellä lausunnolla. Tämä voi parantaa kyselyn suorituskykyä, koska toiminnot suoritetaan yhdessä lauseessa, mikä minimoi lähde- ja kohdetaulukoiden tietojen käsittelykertojen määrän. Suorituskyvyn kasvu riippuu kuitenkin oikeiden hakemistojen, liittymisten ja muiden näkökohtien olemassaolosta.
Hakemiston parhaat käytännöt
MERGE-käskyn suorituskyvyn parantamiseksi suosittelemme seuraavia hakemiston ohjeita :
- Luo lähdetaulukon liitossarakkeisiin yksilöllinen ja kattava hakemisto.
- Luo kohdetaulukon liitossarakkeisiin ainutlaatuinen klusteroitu hakemisto.
Nämä hakemistot varmistavat, että liittymisavaimet ovat yksilöllisiä ja taulukoissa olevat tiedot on lajiteltu. Kyselyn suorituskyky on parantunut, koska kyselyn optimoijan ei tarvitse suorittaa ylimääräistä vahvistusprosessia kaksoisrivien löytämiseksi ja päivittämiseksi, eikä muita lajittelutoimintoja tarvita.
LIITÄ parhaat käytännöt
MERGE-käskyn suorituskyvyn varmistamiseksi ja oikeiden tulosten saamiseksi suosittelemme seuraavia liittymissääntöjä:
- Määritä vain hakuehdot ON < merge_search_condition > -lauseke, joka määrittää lähde- ja kohdetaulukkojen tietojen täsmäytyskriteerit. Toisin sanoen määritä kohdetaulukosta vain sarakkeet, joita verrataan lähdetaulukon vastaaviin sarakkeisiin.
- Älä sisälly vertailuja muihin arvoihin, kuten vakioon. p> Voit suodattaa rivit lähde- tai kohdetaulukoista jollakin seuraavista tavoista.
- Määritä rivien suodatuksen hakuehto asianmukaisessa WHEN-lauseessa. Esimerkiksi, KUN EI OLE VASTAANOTTETTU JA S.EmployeeName LIKE ”S%” SITTY SITÄ … pöytä. Jos näkymä on määritetty kohdetaulukossa, sitä vastaan tehtävien toimien on täytettävä näkymien päivittämisen ehdot. Lisätietoja tietojen päivittämisestä näkymän avulla on ohjeaiheessa Tietojen muokkaaminen näkymän avulla.
- Käytä
WITH <common table expression>
-lauseketta suodattaaksesi rivit lähde- tai kohdetaulukoista. . Tämä menetelmä muistuttaa muiden hakukriteerien määrittämistä ON-lausekkeessa ja saattaa tuottaa virheellisiä tuloksia. Suosittelemme, ettet käytä tätä menetelmää tai testaa perusteellisesti ennen sen toteuttamista.
Yhdistämistoiminto MERGE-käskyssä on optimoitu samalla tavalla kuin SELECT-käskyn liitos. Toisin sanoen, kun SQL Server -prosessit yhdistyvät, kyselyn optimoija valitsee tehokkaimman menetelmän (useista mahdollisuuksista) liitoksen käsittelemiseksi. Kun lähde ja kohde ovat samankokoisia ja aiemmin kuvattuja hakemisto-ohjeita sovelletaan lähde- ja kohdetaulukoihin, yhdistämisliittymäoperaattori on tehokkain kyselysuunnitelma. Tämä johtuu siitä, että molemmat taulukot skannataan kerran eikä tietoja tarvitse lajitella. Kun lähde on pienempi kuin kohdetaulukko, sisäkkäisten silmukoiden operaattori on suositeltava.
Voit pakottaa tietyn liitoksen käyttämään määrittämällä lausekkeen
OPTION (<query_hint>)
MERGE-lausunto. Suosittelemme, että et käytä hash-liitosta kyselyvihjeenä MERGE-käskyille, koska tämä liitostyyppi ei käytä hakemistoja.Parametroinnin parhaat käytännöt
Jos SELECT, INSERT, UPDATE tai DELETE-käsky suoritetaan ilman parametreja, SQL Server-kyselyn optimoija voi päättää parametrisoida käskyn sisäisesti. Tämä tarkoittaa, että kaikki kyselyyn sisältyvät kirjaimelliset arvot korvataan parametreilla. Esimerkiksi käsky INSERT dbo.MyTable (Col1, Col2) VALUES (1, 10) voidaan toteuttaa sisäisesti nimellä INSERT dbo.MyTable (Col1, Col2) VALUES (@ p1, @ p2). Tämä prosessi, jota kutsutaan yksinkertaiseksi parametroinniksi, lisää relaatiomoottorin kykyä sovittaa uudet SQL-käskyt olemassa oleviin, aiemmin koottuihin suoritussuunnitelmiin. Kyselyn suorituskykyä voidaan parantaa, koska kyselyjen kääntämisen ja uudelleen kääntämisen taajuus on vähentynyt. Kyselyn optimoija ei käytä yksinkertaista parametrisointiprosessia MERGE-käskyihin. Siksi kirjaimellisia arvoja sisältävät MERGE-lauseet eivät välttämättä toimi yhtä hyvin kuin yksittäiset INSERT-, UPDATE- tai DELETE-lauseet, koska uusi suunnitelma laaditaan joka kerta, kun MERGE-käsky suoritetaan.
Kyselyn suorituskyvyn parantamiseksi suosittelemme seuraavat parametrointiohjeet:
- Parametroi kaikki kirjaimelliset arvot lausekkeessa
ON <merge_search_condition>
jaWHEN
MERGE-lausunnon lausekkeet. Voit esimerkiksi sisällyttää MERGE-käskyn tallennettuun menettelyyn korvaamalla kirjaimelliset arvot sopivilla syöttöparametreilla. - Jos et voi parametroida käskyä, luo suunnitelma tyyppi
TEMPLATE
ja määritäPARAMETERIZATION FORCED
kyselyvihje suunnitelmaoppaassa. - Jos MERGE-käskyjä suoritetaan usein tietokannassa, harkitse PARAMETERIZATION-vaihtoehdon asettamista tietokanta pakotettuun. Ole varovainen, kun asetat tätä vaihtoehtoa.
PARAMETERIZATION
-vaihtoehto on tietokantatason asetus ja vaikuttaa siihen, miten kaikki tietokantaan liittyvät kyselyt käsitellään.
Suosituslausekkeen parhaat käytännöt
MERGE-käskyssä TOP-lauseke määrittää niiden rivien määrän tai prosenttiosuuden, joihin lähdetaulukon ja kohdetaulukon yhdistämisen jälkeen vaikuttaa, ja sen jälkeen, kun rivit, jotka eivät täytä lisäys-, päivitys- tai poistotoimintoa, poistetaan . TOP-lause vähentää edelleen liitettyjen rivien määrää määritettyyn arvoon ja lisäys-, päivitys- tai poistotoimintoja käytetään jäljellä oleviin yhdistettyihin riveihin järjestämättömällä tavalla. Eli ei ole järjestystä, jossa rivit jaetaan WHEN-lausekkeissa määriteltyjen toimintojen kesken. Esimerkiksi TOP (10) -määrittely vaikuttaa 10 riviin; näistä riveistä 7 voidaan päivittää ja 3 lisätä, tai 1 voidaan poistaa, 5 päivittää ja 4 lisätä ja niin edelleen.
TOP-lauseen käyttö on yleistä datankäsittelykielen suorittamiseksi (DML ) toiminnot isolla pöydällä erissä. Kun käytetään MERGE-lauseen TOP-lauseketta tähän tarkoitukseen, on tärkeää ymmärtää seuraavat seuraukset.
-
I / O-suorituskyky voi vaikuttaa.
MERGE-käsky suorittaa täydellisen taulukon skannauksen sekä lähde- että kohdetaulukoille. Operaation jakaminen eriin vähentää erää kohden suoritettujen kirjoitusoperaatioiden määrää; jokainen erä suorittaa kuitenkin täydellisen taulukon skannauksen lähde- ja kohdetaulukoista. Tuloksena oleva lukutoiminto voi vaikuttaa kyselyn suorituskykyyn.
-
Väärä tuloksia voi esiintyä.
On tärkeää varmistaa, että kaikki peräkkäiset erät kohdistuvat uusiin riveihin. tai ei-toivottua toimintaa, kuten kaksoisrivien väärä lisääminen kohdetaulukkoon, voi esiintyä. Näin voi käydä, kun lähdetaulukko sisältää rivin, joka ei ollut kohdejoukossa, mutta oli yleisessä kohdetaulukossa.
-
Oikeiden tulosten varmistamiseksi:
- Käytä ON-lauseketta selvittääksesi, mitkä lähderivit vaikuttavat olemassa oleviin kohderiveihin ja mitkä ovat aidosti uusia.
- Käytä WHOL MATCHED -lausekkeen lisäehtoa selvittääkseen, onko kohderivi jo päivitetty edellinen erä.
Koska TOP-lausetta sovelletaan vasta näiden lausekkeiden soveltamisen jälkeen, kukin suoritus joko lisää yhden aidosti vastaamattoman rivin tai päivittää yhden olemassa olevan rivin.
Joukkolatauksen parhaat käytännöt
MERGE-käskyä voidaan käyttää tehokkaasti joukkolatauksen lähdetiedostosta kohdetaulukkoon määrittämällä lauseke
OPENROWSET(BULK…)
taulukon lähteenä. Tällöin koko tiedosto käsitellään yhdessä erässä.Joukkoliittoprosessin suorituskyvyn parantamiseksi suosittelemme seuraavia ohjeita:
-
Luo klusteroitu hakemisto kohdetaulukon liitossarakkeisiin.
-
Määritä käyttämällä
-lausekkeen ORDER ja UNIQUE vihjeitä. miten lähdetiedosto lajitellaan. Oletusarvoisesti joukkotoiminto olettaa, että datatiedosto on järjestämätön. Siksi on tärkeää, että lähdetiedot lajitellaan kohdetaulukon klusteroidun indeksin mukaan ja että ORDER-vihjettä käytetään osoittamaan järjestys, jotta kyselyn optimoija voi luoda tehokkaamman kyselysuunnitelman. Vihjeet vahvistetaan ajon aikana; jos datavirta ei ole määritettyjen vihjeiden mukainen, ilmenee virhe.
Nämä ohjeet varmistavat, että liittymisavaimet ovat yksilöllisiä ja tietojen lajittelujärjestys lähdetiedosto vastaa kohdetaulukkoa. Kyselyn suorituskyky paranee, koska muita lajittelutoimintoja ei tarvita eikä tarpeettomia kopioita tarvita.
YHDISTYMISEN suorituskyvyn mittaaminen ja diagnosointi
Seuraavat ominaisuudet ovat käytettävissäsi mittaamisen ja diagnosoinnin helpottamiseksi. MERGE-käskyjen suorituskyky.
- Käytä dynaamisen hallintanäkymän sys.dm_exec_query_optimizer_info yhdistämisstmt-laskuria palauttaaksesi MERGE-käskyjen kyselyoptimointien määrän.
- Käytä Sys.dm_exec_plan_attributes-attribuutin merge_action_type dynaaminen hallintanäkymä palauttaa MERGE-käskyn tuloksena käytetyn liipaisun suoritussuunnitelman tyypin.
- Kerää vianmääritystiedot MERGE-käskylle samalla tavalla SQL Tracella tekisit muiden DML-tietojen käsittelyä varten. Lisätietoja on ohjeaiheessa SQL-jäljitys.
Esimerkkejä
A. MERGE-toiminnon avulla INSERT- ja UPDATE-toiminnot tehdään taulukossa yhdessä lauseessa
Yleinen skenaario päivittää yhden tai useamman taulukon sarakkeen, jos vastaava rivi on olemassa. Tai lisäämällä tiedot uutena rivinä, jos vastaavaa riviä ei ole. Teet yleensä kumman tahansa skenaarion siirtämällä parametrit tallennettuun menettelyyn, joka sisältää asianmukaiset UPDATE- ja INSERT-käskyt. MERGE-käskyllä voit tehdä molemmat tehtävät yksi lause. Seuraava esimerkki näyttää AdventureWorks2012-tietokannan tallennetun menettelyn, joka sisältää sekä INSERT-käskyn että UPDATE-käskyn. Menettelyä muokataan sitten suorittamaan vastaavat toiminnot yhdellä MERGE-käskyllä.
B . MERGE-toiminnon avulla päivitetään ja POISTA-toiminnot taulukossa yhdellä käskyllä
Seuraava esimerkki päivittää MERGE-toiminnon avulla AdventureWorks2012-näytetietokannan
ProductInventory
-taulukon, päivittäin, perustuu tilauksiin, jotka käsitelläänSalesOrderDetail
-taulukossa.Quantity
-sarakkeessaProductInventory
-taulukko päivitetään vähentämällä tilausten määrä, jotka on tehty päivittäin kullekin tuotteelle ryhmässäSalesOrderDetail
taulukko. Jos tuotteen tilausten määrä laskee tuotteen varastotason 0: een tai sitä pienemmäksi, kyseisen tuotteen rivi poistetaanProductInventory
-taulukosta.C. MERGE-toiminnon avulla päivitetään ja INSERT-operaatiot kohdetaulukkoon käyttämällä johdettua lähdetaulukkoa
Seuraava esimerkki käyttää MERGE-toimintoa muokkaamaan
SalesReason
-taulukkoa AdventureWorks2012-tietokannassa joko päivittämällä tai lisäämällä rivejä. Kun lähdetaulukonNewName
-arvon arvo vastaa kohdetaulukonName
-sarakkeen arvoa, (SalesReason
), sarakeReasonType
päivitetään kohdetaulukossa. KunNewName
-arvo ei täsmää, lähderivi lisätään kohdetaulukkoon. Lähdetaulukko on johdettu taulukko, joka käyttää Transact-SQL-taulukon arvonrakentajaa määrittämään useita lähdetaulukon rivit. Lisätietoja taulukon arvon rakentajan käytöstä johdetussa taulukossa on taulukon arvonmuodostaja (Transact-SQL) .Esimerkki osoittaa myös, kuinka OUTPUT-lauseen tulokset tallennetaan taulukon muuttujaan. sitten yhteenveto MERGE-käskyn tuloksista suorittamalla yksinkertainen valintaoperaatio, joka palauttaa lisättyjen ja päivitettyjen rivien määrän.MERGE-käskyn tulosten lisääminen toiseen taulukkoonSeuraava esimerkki kerää MERGE-käskyn OUTPUT-lausekkeesta palautetut tiedot ja lisää nämä tiedot toiseen taulukkoon. MERGE-käsky päivittää AdventureWorks2012-tietokannan
Quantity
-sarakkeenProductInventory
-taulukon tilausten perusteella, jotka käsitelläänSalesOrderDetail
taulukko. Esimerkki kaappaa päivitetyt rivit ja lisää ne toiseen taulukkoon, jota käytetään varastomuutosten seuraamiseen.E. LIITÄNTÄ -toiminnon käyttäminen INSERT- tai UPDATE-toiminnon tekemiseen kohdereunataulukko kaaviotietokannassa
Tässä esimerkissä luot solmutaulukot
Person
jaCity
ja reunataulukkolivesIn
. Käytä MERGE-käskyälivesIn
-reunassa ja lisää uusi rivi, jos reunaa ei ole jo olemassaPerson
jaCity
. Jos reuna on jo olemassa, päivität StreetAddress-määritteenlivesIn
-reunaan.Katso myös