SQL Server MERGE (Română)

Rezumat: în acest tutorial, veți afla cum să utilizați SQL Server MERGE pentru a actualiza datele într-un tabel pe baza valorilor potrivite dintr-un alt tabel.

Introducere Instrucțiune SQL Server MERGE

Să presupunem că aveți două tabele numite tabele sursă și țintă și trebuie să actualizați tabelul țintă pe baza valorilor potrivite din tabelul sursă. Există trei cazuri:

  1. Tabelul sursă are câteva rânduri care nu există în tabelul țintă. În acest caz, trebuie să inserați rânduri care se află în tabelul sursă în tabelul țintă.
  2. Tabelul țintă are câteva rânduri care nu există în tabelul sursă. În acest caz, trebuie să ștergeți rânduri din tabelul țintă.
  3. Tabelul sursă are câteva rânduri cu aceleași chei ca rândurile din tabelul țintă. Cu toate acestea, aceste rânduri au valori diferite în coloanele non-cheie. În acest caz, trebuie să actualizați rândurile din tabelul țintă cu valorile provenite din tabelul sursă.

Următoarea imagine ilustrează tabelele sursă și țintă cu acțiunile corespunzătoare: inserare, actualizați și ștergeți:

Dacă folosiți INSERT, UPDATE și DELETE individual, trebuie să construiți trei separate instrucțiuni pentru a actualiza datele la tabelul țintă cu rândurile potrivite din tabelul sursă.

Cu toate acestea, SQL Server oferă instrucțiunea MERGE care vă permite să efectuați trei acțiuni în același timp. Următorul arată sintaxa declarației MERGE:

Code language: SQL (Structured Query Language) (sql)

Mai întâi, specificați tabelul țintă și sursa tabel din clauza MERGE.

În al doilea rând, merge_condition determină modul în care se potrivesc rândurile din tabelul sursă rândurile din tabelul țintă. Este similară condiției de asociere din clauza de asociere. De obicei, utilizați coloanele cheii fie cheie primară, fie cheie unică pentru potrivire.

În al treilea rând, merge_condition are ca rezultat trei stări: MATCHED, NOT MATCHED și NOT MATCHED BY SOURCE.

  • MATCHED: acestea sunt rândurile care corespund condiției de îmbinare. În diagramă, acestea sunt afișate ca albastru. Pentru rândurile potrivite, trebuie să actualizați coloanele rândurilor din tabelul țintă cu valori din tabelul sursă.
  • NOT MATCHED: acestea sunt rândurile din sursă tabel care nu are niciun rând potrivit în tabelul țintă. În diagramă, acestea sunt prezentate ca portocalii. În acest caz, trebuie să adăugați rândurile din tabelul sursă la tabelul țintă. Rețineți că NOT MATCHED este, de asemenea, cunoscut sub numele de NOT MATCHED BY TARGET.
  • NOT MATCHED BY SOURCE : acestea sunt rândurile din tabelul țintă care nu se potrivește cu niciun rând din tabelul sursă. Acestea sunt prezentate ca verzi în diagramă. Dacă doriți să sincronizați tabelul țintă cu datele din tabelul sursă, va trebui să utilizați această condiție de potrivire pentru a șterge rândurile din tabelul țintă.

Exemplu de instrucțiune SQL Server MERGE

Să presupunem că avem două tabele sales.category și sales.category_staging care stochează vânzările pe categorii de produse.

Pentru a actualiza datele la sales.category (tabel țintă) cu valorile din sales.category_staging (tabel sursă), utilizați următorul MERGE declarație:

În acest exemplu, am folosit valorile din coloanele category_id din ambele tabele ca condiție de îmbinare.

  • Mai întâi, rândurile cu id 1, 3, 4 din tabelul sales.category_staging se potrivește cu rândurile din tabelul țintă, prin urmare, instrucțiunea MERGE actualizează valorile în coloana cu numele și suma categoriei în tabelul sales.category.
  • În al doilea rând, rândurile cu id 5 și 6 din tabelul sales.category_staging nu există în tabelul sales.category, deci instrucțiunea MERGE introduce aceste rânduri în tabelul țintă.
  • În al treilea rând, rândul cu id 2 din tabelul sales.category nu există în tabelul sales.sales_staging, prin urmare, MERGE șterge acest rând.

Ca rezultat al fuziunii, datele din tabelul sales.category sunt complet sincronizate cu datele din sales.category_staging tabel.

În acest tutorial, ați aflat cum să utilizați instrucțiunea SQL Server MERGE pentru a face modificări într-un tabel bazat pe potrivirea valorilor dintr-un alt tabel.

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *