A Merge egy SQL utasítás , amely lehetővé teszi egy tábla adatainak egyesítését egy másik tábla adataival. Táblázatok egyesítésekor a feltétel ellenőrzésre kerül, és ha igaz, akkor Frissítés történik , ha nem, akkor Insert . Ezenkívül nem módosíthatja a Frissítés szakaszban lévő táblázat mezőit, amelyek két tábla összekapcsolására szolgálnak. Az adatok csak a MERGE INTO záradékban lévő táblázathoz módosulnak vagy hozzáadódnak, a USING záradékban lévő táblázat változatlan marad.
Az utasítást formálisan az SQL:2003 szabványban vezették be, és az SQL:2008 szabványban bővítették ki.
Egy tipikus SQL adattárház-megoldásban gyakran fontos a raktárban lévő adatok előzményeinek megőrzése az ETL -eszköznek átadott eredeti adatokra hivatkozva . A leggyakoribb felhasználási eset a lassan változó dimenziók (SCD) támogatása egy adattárházban. Ilyen esetekben új rekordokat kell beszúrni az adattárba, törölni vagy megjelölni a tárolóból azokat a rekordokat, amelyek már nem szerepelnek a forrásban, és frissíteni kell a tárolóban a forrásnál frissített adatokat [1] .
Az SQL MERGE utasítást az SQL Server 2008 kiadásában vezették be, amely nagyobb rugalmasságot adott az adatbázis-programozóknak az INSERT, UPDATE és DELETE utasításokban szereplő rendetlen kódjuk egyszerűsítésére azáltal, hogy logikát alkalmaz az SCD ETL-ben való megvalósítására [2] .
Számos szempont használható a MERGE utasítások teljesítményének optimalizálására. Mostantól lehetséges DML utasítások (INSERT, UPDATE és DELETE) írása egyetlen utasításba kombinálva. Adatfeldolgozási szempontból ez hasznos, mivel mindhárom utasítás esetében külön-külön lecsökkenti a lemez I/O-ját, és az adatok csak egyszer olvashatók be [3] .
Ezenkívül a MERGE utasítás teljesítménye nagymértékben függ a forrás- és a céltáblázathoz illeszkedő indexektől. Az indexeken kívül fontos a csatlakozási feltételek optimalizálása is. Ugyanakkor lehetővé kell tenni a forrástábla szűrését úgy, hogy az operátor csak a szükséges rekordokat vonja ki a szükséges műveletek elvégzéséhez [2] .
ahol:
Megad egy ideiglenes elnevezett eredményhalmazt vagy nézetet (más néven általános táblakifejezést), amely a MERGE utasítás hatókörében van definiálva. A MERGE utasítás által hivatkozott eredményhalmaz egy egyszerű lekérdezésből származik.
TOP ( kifejezés ) [ SZÁZALÉK ]Meghatározza az érintett sorok számát vagy százalékát. kifejezés lehet egy szám vagy a sorok számának százaléka. A TOP kifejezés által hivatkozott sorok nincsenek meghatározott sorrendben.
adatbázis_neveAnnak az adatbázisnak a neve, ahol a céltábla található .
séma_neveA séma neve, amelyhez a céltábla tartozik .
target_tableAz a tábla vagy nézet, amelyhez a <table_source> tábla adatsorait a <clause_search_condition> egyezteti. A target_table a MERGE utasítás WHEN záradékai által meghatározott beszúrási, frissítési vagy törlési műveletek célja. cél_tábla nem lehet távoli tábla. A target_table táblához nem lehetnek meghatározott szabályok .
A tippeket <merge_hint> formában lehet megadni.
[ AS ] table_aliasAlternatív neve a cél_tábla táblázathivatkozásainak .
<table_source> HASZNÁLATAMegad egy adatforrást, amely a <merge_search feltétel> alapján le van képezve a target_table adatsoraira. Ennek az egyezésnek az eredménye határozza meg azokat a műveleteket, amelyeket a MERGE utasítás WHEN záradékai hajtanak végre. A <table_source> argumentum lehet távoli tábla vagy távoli táblákhoz hozzáférő nézet.
[ AS ] table_aliasAlternatív neve a táblaforrás táblahivatkozásainak.
ON <merge_search_condition>Megadja azokat a feltételeket, amelyek mellett a <tábla_forrás> a céltáblához csatlakozik az egyeztetés érdekében. Meg kell adnia azokat a céltábla-oszlopokat, amelyek összehasonlításra kerülnek a megfelelő forrástábla oszlopával.
AMIKOR EGYEZTETVE AKKIN <merge_matched>Megadja, hogy az összes *target_table sor, amely megfelel a <table_source> ON <merge_search_condition> kifejezés által visszaadott soroknak, és megfelel a további keresési feltételeknek, frissítésre vagy törlésre kerül a <merge_matched> záradéknak megfelelően.
A MERGE utasítás legfeljebb két WHEN MATCHED záradékot tartalmaz. Ha két tagmondat van megadva, az első záradékot egy ÉS <search_condition> záradéknak kell követnie.
AMIKOR NEM egyezik [ CÉL ÁLTAL ] AKKOR <merge_not_matched>Megadja, hogy a rendszer beszúrjon egy sort a céltáblázatba a < table_source > ON < merge_search_condition > kifejezés által visszaadott minden olyan sorhoz, amely nem egyezik a céltábla egy sorával, de teljesít egy további keresési feltételt (ha van ilyen). A beszúrandó értékek a <merge_not_matched> záradékkal vannak megadva. A MERGE utasításnak csak egy WHEN NOT MATCHED [ BY TARGET ] záradéka lehet.
HA NEM egyezik meg FORRÁS ÁLTAL, AKKOR <merge_matched>Megadja, hogy az összes *target_table sor, amely nem egyezik a <table_source> ON <merge_search_condition> kifejezés által visszaadott sorokkal, és megfelel a további keresési feltételeknek, frissítésre vagy törlésre kerül a <merge_matched> záradéknak megfelelően.
ÉS <clause_search_condition>Bármely érvényes keresési kifejezés meg van adva.
<table_hint_limited>A MERGE utasítás által végrehajtott minden egyes beszúrási, frissítési vagy törlési művelethez egy vagy több táblázati tippet ad meg a céltáblára. A WITH kulcsszó és a zárójelek megadása kötelező.
A NOLOCK és READUNCOMMITTED kulcsszavak nem engedélyezettek.
INDEX ( index_val [ ,...n ] )Megadja egy vagy több index nevét vagy azonosítóját a céltáblában, hogy implicit összekapcsolást hajtson végre a forrástáblán.
<output_clause>Egy sort ad vissza a target_table minden olyan sorához, amely frissítési, beszúrási vagy törlési műveletet tartalmaz, nem meghatározott sorrendben. Az $action paraméter a kimeneti záradékban adható meg. Az $action egy nvarchar(10) oszlop, amely minden sorhoz három érték egyikét adja vissza: INSERT, UPDATE vagy DELETE, az adott sorban végrehajtott műveletnek megfelelően. Az OUTPUT záradékot a MERGE záradék által érintett sorok lekérdezéséhez vagy számlálásához ajánljuk.
OPCIÓ ( <lekérdezés_tipp> [ ,...n ] )Megadja, hogy az optimalizáló tippek segítségével testreszabható, hogy az adatbázismotor hogyan kezelje az utasítást.
<merge_matched>Megadja a frissítési vagy törlési műveletet, amely a céltábla minden olyan sorára vonatkozik, amely nem egyezik a <table_source> ON <merge_search_condition> kifejezés által visszaadott sorokkal, és megfelel a további keresési feltételeknek .
UPDATE SET <set_clause>Megadja a céltáblázatban frissítendő oszlop- vagy változónevek listáját, valamint a frissítendő értékeket.
TÖRLÉSMegadja, hogy a cél_tábla sorainak megfelelő sorok eltávolításra kerülnek.
<merge_not_matched>Megadja a céltáblázatba beszúrandó értékeket.
( oszlop_lista )A céltábla egy vagy több oszlopának listája, amelybe az adatok beszúrásra kerülnek. Az oszlopokat egykomponensű névként kell megadni, ellenkező esetben a MERGE utasítás hibát ad vissza. Az oszlop_listát zárójelek közé kell tenni, elemeit vesszővel kell elválasztani.
ÉRTÉKEK ( értékek_lista )Vesszővel elválasztott lista, amely konstansokat, változókat vagy kifejezéseket tartalmaz, amelyek a céltáblázatba beszúrandó értékeket adnak vissza. A kifejezések nem tartalmazhatnak EXECUTE utasítást.
ALAPÉRTÉKEKFeltölti a beszúrt sort az egyes oszlopokhoz meghatározott alapértelmezett értékekkel.
<keresési_feltétel>Beállítja a keresési feltételeket a <merge_search_condition> vagy a <clause_search_condition> megadására.
Grafikonillesztő sablont határoz meg.
MegjegyzésekA három MATCHED tagmondat közül legalább egyet meg kell adni, de tetszőleges sorrendben megadhatók. Egyetlen MATCHED záradékban egy változó nem frissíthető többször.
A MERGE utasítás által egy céltáblára alkalmazott törlésre, beszúrásra vagy frissítésre az adott táblára meghatározott összes korlátozás vonatkozik, beleértve a lépcsőzetes adatintegritási megkötéseket is. Ha az IGNORE_DUP_KEY BE van kapcsolva a céltábla bármely egyedi indexénél, akkor a MERGE utasítás figyelmen kívül hagyja ezt a beállítást.
A MERGE utasítás használatához pontosvessző (;) szükséges az utasítás végén. 10713-as hiba akkor fordul elő, ha egy MERGE utasítás konstrukciólezáró nélkül kerül végrehajtásra.
Ez az operátor a következő adatbázis-kezelő rendszerekben van megvalósítva: Oracle Database, IBM Db2, Teradata, EXASOL, Firebird, CUBRID, H2, HSQLDB, MS SQL, Vectorwise és Apache Derby.
Ugyanezt az operátort használja a Microsoft Azure SQL adatbázis.
Forrás: https://web.archive.org/web/20111120170710/http://oracle-wiki.ru/wiki/Merge
SQL | |
---|---|
Verziók |
|
Kulcsszavak |
|
Kapcsolódó cikkek | |
Az ISO/IEC SQL részei |
|
Adatbázis | |
---|---|
Fogalmak |
|
Objektumok |
|
Kulcsok | |
SQL |
|
Alkatrészek |