Sloučení serveru SQL
Shrnutí: V tomto kurzu se naučíte, jak používat server SQL MERGE
příkaz k aktualizaci dat v tabulce na základě hodnot shodných z jiné tabulky.
Úvod Příkaz Sloučit SQL Server
Předpokládejme, že máte dvě tabulky zvané zdrojová a cílová tabulka a musíte aktualizovat cílovou tabulku na základě hodnot shodných se zdrojovou tabulkou. Existují tři případy:
- Zdrojová tabulka obsahuje některé řádky, které v cílové tabulce neexistují. V tomto případě musíte do cílové tabulky vložit řádky, které jsou ve zdrojové tabulce.
- Cílová tabulka obsahuje některé řádky, které ve zdrojové tabulce neexistují. V takovém případě musíte odstranit řádky z cílové tabulky.
- Zdrojová tabulka obsahuje některé řádky se stejnými klíči jako řádky v cílové tabulce. Tyto řádky však mají ve sloupcích, které nejsou klíčem, jiné hodnoty. V tomto případě musíte aktualizovat řádky v cílové tabulce o hodnoty pocházející ze zdrojové tabulky.
Následující obrázek ilustruje zdrojovou a cílovou tabulku s odpovídajícími akcemi: insert, aktualizovat a mazat:
Pokud použijte příkaz INSERT
, UPDATE
a DELETE
jednotlivě, musíte vytvořit tři samostatné příkazy k aktualizaci dat do cílové tabulky pomocí odpovídajících řádků ze zdrojové tabulky.
SQL Server však poskytuje příkaz MERGE
, který umožňuje provádět tři akce současně. Následující text ukazuje syntaxi příkazu MERGE
:
Code language: SQL (Structured Query Language) (sql)
Nejprve zadáte cílovou tabulku a zdroj tabulka v klauzuli MERGE
.
Zadruhé merge_condition
určuje, jak se řádky ze zdrojové tabulky shodují řádky z cílové tabulky. Je to podobné jako podmínka spojení v klauzuli join. Ke shodě obvykle používáte sloupce klíčů buď primární klíč, nebo jedinečný klíč.
Zatřetí, výsledkem merge_condition
je tři stavy: MATCHED
, NOT MATCHED
a NOT MATCHED BY SOURCE
.
-
MATCHED
: toto jsou řádky, které odpovídají podmínce sloučení. V diagramu jsou zobrazeny modře. U odpovídajících řádků musíte aktualizovat sloupce řádků v cílové tabulce hodnotami ze zdrojové tabulky. -
NOT MATCHED
: toto jsou řádky ze zdroje tabulka, která nemá v cílové tabulce žádné odpovídající řádky. V diagramu jsou zobrazeny oranžově. V takovém případě musíte přidat řádky ze zdrojové tabulky do cílové tabulky. Upozorňujeme, žeNOT MATCHED
je také známý jakoNOT MATCHED BY TARGET
. -
NOT MATCHED BY SOURCE
: jedná se o řádky v cílové tabulce, které neodpovídají žádným řádkům ve zdrojové tabulce. V diagramu jsou zobrazeny zeleně. Pokud chcete synchronizovat cílovou tabulku s daty ze zdrojové tabulky, budete muset použít tuto podmínku shody k odstranění řádků z cílové tabulky.
Příklad příkazu Sloučit SQL Server
Předpokládejme, že máme dvě tabulky sales.category
a sales.category_staging
, které ukládají tržby podle kategorií produktů.
Chcete-li aktualizovat data do sales.category
(cílové tabulky) o hodnoty z sales.category_staging
(zdrojové tabulky), použijete následující MERGE
prohlášení:
V tomto příkladu jsme jako podmínku sloučení použili hodnoty ve sloupcích category_id
v obou tabulkách.
- Nejprve řádky s id 1, 3, 4 z
sales.category_staging
tabulky odpovídá řádkům z cílové tabulky, proto příkazMERGE
aktualizuje hodnoty ve sloupcích s názvem kategorie a částkou vsales.category
tabulce. - Zadruhé, řádky s id 5 a 6 z
sales.category_staging
tabulky neexistují v tabulcesales.category
, takže příkazMERGE
vloží tyto řádky do cílové tabulky. - Za třetí, řádek s ID 2 z
sales.category
tabulky v tabulcesales.sales_staging
neexistuje, protoMERGE
tento řádek odstraní.
V důsledku fúze jsou data v tabulce sales.category
plně synchronizována s daty v sales.category_staging
tabulka.
V tomto kurzu jste se naučili používat MERGE
příkaz SQL Server k provádění změn v tabulce na základě shody hodnot z jiné tabulky.