Merge (transact-sql)

Specifică un set de rezultate temporar sau o vedere definită în zona de instrucțiuni MERGE, care se numește o expresie de tabelă generalizată. Setul de rezultate, referit de instrucțiunea MERGE, este derivat dintr-o interogare simplă. Pentru mai multe informații, consultați WITH cu o generic_table_expression (Transact-SQL).







TOP (expresie) [PERCENT]

Indică numărul sau procentul de rânduri care sunt acoperite de această operație. Expresia expresiei poate fi fie un număr, fie un procentaj de linii. Liniile la care se face referire în expresia TOP nu sunt aranjate într-o anumită ordine. Pentru mai multe informații, consultați TOP (Transact-SQL).

Numele bazei de date în care este localizată tabela target_table.

Numele schemei la care face parte tabela target_table.

Tabel sau vizualizare cu care să comparați rândurile de date dintr-un tabel prin condiție . Parametrul target_table este ținta oricărei operațiuni de inserare, actualizare sau ștergere specificată de clauza WHEN a instrucțiunii MERGE.

Dacă argumentul target_table este o vizualizare, atunci toate acțiunile efectuate cu acesta trebuie să îndeplinească condițiile pentru actualizarea vizualizărilor. Pentru informații suplimentare, consultați Modificarea datelor printr-o vizualizare.

Tabelul target_table nu poate fi șters, iar regulile nu pot fi definite pentru acesta.

Numele alternativ folosit pentru a face trimitere la acest tabel.

Specifică sursa de date care este mapată la rândurile de date din tabela țintă în funcție de condiție . Rezultatul acestei coincidențe determină acțiunile care sunt efectuate de clauzele WHEN ale instrucțiunii MERGE. argument poate fi o masă la distanță sau o tabelă derivată care accesează tabele la distanță.

argument poate fi o tabelă derivată care utilizează constructorul de valori Transact-SQL pentru a construi un tabel prin specificarea mai multor rânduri.

Pentru mai multe informații despre sintaxa și argumentele acestei fraze, consultați FROM (Transact-SQL).

Condițiile în care se află tabelul se conectează la target_table pentru comparație.

Este important să specificați numai acele coloane din tabela destinație care sunt utilizate pentru a căuta potriviri. Cu alte cuvinte, trebuie să specificați coloanele tabelului țintă, care sunt comparate cu coloana corespunzătoare din tabela sursă. Nu se recomandă creșterea randamentului interogării prin filtrarea rândurilor în tabelul țintă din clauza ON, ca și cu AND NOT target_table.column_x = valoare. Acest lucru poate duce la rezultate neprevăzute și incorecte.

CÂND SE MECIUNEAZĂ MAI MULT

Se specifică faptul că toate liniile target_table. care corespund rândurilor returnate ON , și îndeplinesc condițiile de căutare suplimentare, sunt actualizate sau șterse în conformitate cu propunerea .

Instrucțiunea MERGE nu poate avea mai mult de două clauze WHEN MATCHED. Dacă sunt indicate două propuneri, prima teză trebuie să fie însoțită de propoziția AND . Pentru orice linie, a doua clauză WHEN MATCHED se aplică numai dacă prima teză nu este aplicată. Dacă există două clauze WHEN MATCHED, trebuie să specificați acțiunea UPDATE, iar cealaltă trebuie să specificați acțiunea DELETE. Dacă acțiunea UPDATE este specificată în propoziție și mai mult de o linie în se potrivește cu șirul în target_table pe baza , apoi SQL Server returnează o eroare. Instrucțiunea MERGE nu poate fi utilizată pentru a actualiza o singură linie mai mult decât o singură dată și poate fi de asemenea utilizată pentru actualizarea și ștergerea aceleiași linii.

CÂND FĂRĂ A FI OBIECTATĂ [PRIN TARGET]

Indică faptul că șirul este inserat în tabela țintă pentru fiecare rând returnat de expresie ON , care nu se potrivește liniei din tabela target_table. dar satisface condiția de căutare suplimentară (dacă există). Valorile pentru inserare sunt indicate folosind teza . Instrucțiunea MERGE poate avea doar o clauză WHEN MATCHED.

CÂND NU SUNT RESPECTIV DE SURSĂ

Se specifică faptul că toate liniile target_table. care nu corespund rândurilor returnate ON , și îndeplinesc condițiile de căutare suplimentare, sunt actualizate sau șterse în conformitate cu propunerea .







Instrucțiunea MERGE nu poate avea mai mult de două clauze WHEN NOT MATCHED BY SOURCE. Dacă există două propoziții, prima teză trebuie să fie însoțită de propoziția AND . Pentru orice rând selectat, a doua clauză WHEN NOT MATCHED BY SOURCE se aplică numai dacă prima clauză nu este aplicată. Dacă există două clauze WHERE NOT MATCHED BY SOURCE, trebuie să specificați o acțiune UPDATE, iar cealaltă trebuie să specificați o acțiune DELETE. În condiție puteți face referire numai la coloanele din tabelul țintă.

Dacă rândurile nu sunt returnate de tabel , Coloanele din tabela sursă nu pot primi acces. Dacă operațiile de actualizare sau ștergere sunt specificate în , Propunerea se referă la tabela sursă și returnează eroare 207 (nume de coloană nevalid). De exemplu, propunerea ATUNCI CÂND NU egalată de SURSĂ APOI instrucțiuni UPDATE SET TargetTable.Col1 = SourceTable.Col1 poate cauza erori din cauza inaccesibilității coloana Col1 din tabela sursă.

Este specificată orice condiție de căutare valabilă. Pentru mai multe informații, consultați starea de căutare (Transact-SQL).

Indică unul sau mai multe indicii de masă, care sunt utilizate în tabelul de destinație pentru fiecare inserare, actualizare sau ștergere, sunt efectuate de instrucțiuni MERGE. Trebuie să utilizați cuvântul cheie CU și paranteze.

Utilizarea argumentelor NOLOCK și READUNCOMMITTED este interzisă. Pentru mai multe informații despre sugestii de tabel, consultați Sugestii de tabelă (Transact-SQL).

Specificarea promptului TABLOCK pentru tabela destinație INSERT are aceleași consecințe ca și prompta TABLOCKX. O blocare exclusivă va fi aplicată la masă. Dacă este specificat FORCESEEK, acesta este aplicat unei instanțe explicite a tabelei țintă care este conectată la tabela sursă.

Specificarea metodei READPAST cu o clauză WHEN NOT MATCHED [BY TARGET] în THEN INSERT poate avea ca rezultat operații INSERT care încalcă constrângerile UNIQUE.

INDEX (index_val [.n])

Specifică numele sau codul unuia sau mai multor indexuri de tabele destinație pentru a efectua o conexiune explicită la tabela sursă. Pentru mai multe informații, consultați Sugestii de tabelă (Transact-SQL).

Returnează un șir pentru fiecare linie din tabela target_table. care este actualizat, inserat sau șters fără o comandă specifică. Pentru mai multe informații despre argumentele acestei fraze, consultați clauza OUTPUT (Transact-SQL).

OPȚIUNE ( [. n])

Indică faptul că sugestiile optimizatorului sunt utilizate pentru a configura modul în care motorul bazei de date gestionează instrucțiunile. Pentru mai multe informații, consultați Prompts în interogări (Transact-SQL).

Indică o acțiune de actualizare sau ștergere care se aplică tuturor liniilor din tabela destinație. care nu se potrivesc liniilor returnate ON și să satisfacă orice condiții de căutare suplimentare.

UPDATE SET

Specifică o listă cu numele sau variabilele de coloane pe care doriți să le actualizați în tabelul țintă și valorile pe care doriți să le utilizați pentru a le actualiza.

Pentru mai multe informații despre argumentele acestei fraze, consultați UPDATE (Transact-SQL). Atribuirea unei variabile cu aceeași valoare ca și coloana nu este permisă.

Se specifică faptul că liniile coincid cu liniile din target_table. sunt șterse.

Specificați valorile de inserat în tabelul țintă.

O listă formată din una sau mai multe coloane din tabela destinație în care sunt inserate datele. Coloanele trebuie specificate sub forma unui nume cu o singură componentă, deoarece în caz contrar, instrucțiunea MERGE returnează o eroare. Argumentul column_list trebuie să fie închis în paranteze și separate prin virgule.

O listă de constante, variabile sau expresii delimitate prin virgule, care returnează valori pentru inserarea în tabela destinație. Expresiile nu pot conține o instrucțiune EXECUTE.

Umple șirul introdus cu valorile implicite definite pentru fiecare coloană.

Pentru mai multe informații despre această teză, consultați Instrucțiunea INSERT (Transact-SQL).

Condițiile de căutare utilizate pentru a specifica sau . Pentru mai multe informații despre argumentele acestei fraze, consultați Condiția de căutare (Transact-SQL).

Trebuie specificată cel puțin una dintre cele trei instrucțiuni MATCHED, dar ele pot fi specificate în orice ordine. Într-o clauză MATCHED, variabila nu poate fi actualizată de mai multe ori.

Toate ștergerile, inserările sau actualizările specificate pentru tabela destinație a instrucțiunii MERGE sunt supuse tuturor restricțiilor definite pentru acest tabel, inclusiv toate constrângerile legate de integritatea referențială în cascadă. Dacă IGNORE_DUP_KEY este setat la ON pentru toate indexurile unice din tabela destinație, acest parametru este ignorat în instrucțiunea MERGE.

Pentru a utiliza instrucțiunea MERGE, aveți nevoie de un punct și virgulă (;) ca semn al sfârșitului instrucțiunii. Eroare 10713 apare dacă instrucțiunea MERGE este executată fără sfârșitul constructului.

Dacă funcția @@ ROWCOUNT (Transact-SQL) este utilizată după instrucțiunea MERGE, ea returnează numărul total de rânduri introduse, actualizate și șterse de la client.

Cuvântul cheie MERGE este rezervat în totalitate dacă nivelul de compatibilitate a bazei de date este setat la 100. Instrucțiunea MERGE este disponibilă la nivelurile de compatibilitate 90 și 100, însă acest cuvânt cheie nu este rezervat integral la nivelul de compatibilitate de 90.

Implementarea unui declanșator

Pentru fiecare operație de inserare, actualizare sau ștergere specificată în instrucțiunea MERGE, SQL Server pornește toate declanșatoarele corespunzătoare AFTER definite pentru tabela destinație, dar nu garantează o comandă specifică de declanșare. Declanșatoarele care sunt definite pentru aceeași acțiune sunt implementate în ordinea specificată de utilizator. Pentru mai multe informații despre setarea ordinul de execuție declanșează cm. În specificarea prima și ultima declanșatoare.

Dacă INSTEAD OF trigger este inclus în tabela țintă pentru operațiile de inserare, actualizare sau ștergere efectuate de instrucțiunea MERGE, atunci declanșatorul INSTEAD OF trebuie să fie activat pentru toate operațiile specificate în instrucțiunea MERGE.

În cazul în care declanșatorii INSTEAD OF UPDATE sau INSTEAD OF DELETE sunt definiți în tabela țintă, nu se efectuează operații de actualizare sau ștergere. În schimb, sunt declanșate declanșatoarele, iar tabelele inserate și șterse sunt completate corespunzător.

Dacă declanșatoarele INSTEAD OF INSERT sunt definite în tabela target_table, operațiile de inserare nu sunt efectuate. În schimb, declanșatoarele sunt pornite, iar tabela inserată este așezată corespunzător.







Articole similare

Trimiteți-le prietenilor: