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 MATCHEDje 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_stagingtabulky odpovídá řádkům z cílové tabulky, proto příkazMERGEaktualizuje hodnoty ve sloupcích s názvem kategorie a částkou vsales.categorytabulce. - Zadruhé, řádky s id 5 a 6 z
sales.category_stagingtabulky neexistují v tabulcesales.category, takže příkazMERGEvloží tyto řádky do cílové tabulky. - Za třetí, řádek s ID 2 z
sales.categorytabulky v tabulcesales.sales_stagingneexistuje, protoMERGEtento řá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.