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:

  1. 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.
  2. 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.
  3. 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, že NOT MATCHED je také známý jako NOT 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říkaz MERGE aktualizuje hodnoty ve sloupcích s názvem kategorie a částkou v sales.category tabulce.
  • Zadruhé, řádky s id 5 a 6 z sales.category_staging tabulky neexistují v tabulce sales.category, takže příkaz MERGE vloží tyto řádky do cílové tabulky.
  • Za třetí, řádek s ID 2 z sales.category tabulky v tabulce sales.sales_staging neexistuje, proto MERGE 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.

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *