SQL Server MERGE (Magyar)

Összegzés: ebben az oktatóanyagban megtanulhatja az SQL Server használatát MERGE utasítás egy tábla adatainak frissítéséhez egy másik táblából egyeztetett értékek alapján.

Bevezetés SQL Server MERGE utasítás

Tegyük fel, hogy két táblája van, forrás- és céltáblának hívva, és meg kell frissítse a céltáblát a forrástáblából egyeztetett értékek alapján. Három eset van:

  1. A forrás táblának vannak olyan sorai, amelyek nem léteznek a céltáblában. Ebben az esetben be kell illesztenie azokat a sorokat, amelyek a forrás táblában vannak, a céltáblába.
  2. A céltáblázatnak vannak olyan sorai, amelyek nem szerepelnek a forrás táblában. Ebben az esetben törölnie kell a sorokat a céltáblából.
  3. A forrás táblázatban vannak olyan sorok, amelyek ugyanazokkal a kulcsokkal rendelkeznek, mint a céltábla sorai. Ezeknek a soroknak azonban különböző értékei vannak a nem kulcs oszlopokban. Ebben az esetben frissítenie kell a céltábla sorait a forrás táblából származó értékekkel.

A következő kép a forrás és a cél táblákat mutatja be a megfelelő műveletekkel: insert, frissítés és törlés:

Ha használja a INSERT, UPDATE és a DELETE utasítást egyenként, három külön kell elkészítenie utasítások az adatok frissítéséhez a céltáblához a forrás táblázat megfelelő soraival.

Az SQL Server azonban megadja a MERGE utasítást, amely lehetővé teszi három végrehajtását. cselekvések egyidejűleg. Az alábbiakban bemutatjuk a MERGE utasítás szintaxisát:

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

Először adja meg a céltáblát és a forrást táblázat a MERGE záradékban.

Másodszor, az merge_condition meghatározza, hogy a forrás táblázat sorai hogyan illeszkednek a céltábla sorai. Hasonló az összekapcsolási feltételben szereplő egyesítési feltételhez. Általában az elsődleges kulcsot vagy az egyedi kulcsot használja a kulcsoszlopokhoz.

Harmadszor, az merge_condition három állapotot eredményez: MATCHED, NOT MATCHED és NOT MATCHED BY SOURCE.

  • MATCHED: ezek azok a sorok, amelyek megfelelnek az egyesítési feltételnek. Az ábrán kék színnel vannak feltüntetve. Az egyező sorokhoz frissítenie kell a céltábla soroszlopait a forrástábla értékeivel.
  • NOT MATCHED: ezek a sorok a forrásból táblázat, amely nem tartalmaz egyező sorokat a céltáblában. Az ábrán narancssárgán jelennek meg. Ebben az esetben hozzá kell adnia a forrástábla sorait a céltáblához. Ne feledje, hogy a NOT MATCHED más néven NOT MATCHED BY TARGET.
  • NOT MATCHED BY SOURCE : ezek a céltáblázat azon sorai, amelyek nem felelnek meg a forrás táblázat egyetlen sorának sem. Az ábrán zöld színnel jelennek meg. Ha szinkronizálni szeretné a céltáblát a forrástábla adataival, akkor ezt az egyezési feltételt kell használnia a sorok törléséhez a céltáblából.

SQL Server MERGE utasítás példa

Tegyük fel, hogy két táblánk van sales.category és sales.category_staging, amelyek az értékesítéseket termékkategóriák szerint tárolják.

Ha frissíteni kívánja az adatokat az sales.category (céltáblára) a sales.category_staging (forrás táblázat) értékeivel, használja a következő MERGE utasítás:

Ebben a példában egyesítési feltételként mindkét tábla category_id oszlopainak értékeit használtuk.

  • Először a sorokat a sales.category_staging táblázat 1, 3, 4 azonosítójával egyezik a céltábla soraival, ezért a MERGE utasítás frissíti az értékeket kategória neve és összege oszlopokban a sales.category táblázatban.
  • Másodszor, a sales.category_staging táblázatból az 5. és 6. azonosítójú sorok nem léteznek. a sales.category táblázatban, így a MERGE utasítás beszúrja ezeket a sorokat a céltáblába.
  • Harmadszor, a sor a sales.category tábla 2. azonosítójával nem létezik a sales.sales_staging táblában, ezért a MERGE utasítás törli ezt a sort.

Az összevonás eredményeként az sales.category táblázat adatai teljesen szinkronizálódnak a sales.category_staging táblázat.

Ebben az oktatóanyagban megtanulta, hogyan kell használni az SQL Server MERGE utasítást a változtatások végrehajtásához. egy táblázatban, egy másik táblázat megfelelő értékei alapján.

Vélemény, hozzászólás?

Az email címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük