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
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
argument
Pentru mai multe informații despre sintaxa și argumentele acestei fraze, consultați FROM (Transact-SQL).
Condițiile în care se află tabelul
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
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
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
CÂND NU SUNT RESPECTIV DE SURSĂ
Se specifică faptul că toate liniile target_table. care nu corespund rândurilor returnate
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
Dacă rândurile nu sunt returnate de tabel
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 (
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
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
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.