SQL Server MERGE (Polski)
Podsumowanie: w tym samouczku dowiesz się, jak używać SQL Server MERGE aby zaktualizować dane w tabeli na podstawie wartości dopasowanych z innej tabeli.
Wprowadzenie Instrukcja MERGE programu SQL Server
Załóżmy, że masz dwie tabele zwane tabelami źródłową i docelową i musisz zaktualizuj tabelę docelową na podstawie dopasowanych wartości z tabeli źródłowej. Istnieją trzy przypadki:
- Tabela źródłowa zawiera wiersze, które nie istnieją w tabeli docelowej. W takim przypadku musisz wstawić wiersze z tabeli źródłowej do tabeli docelowej.
- W tabeli docelowej znajdują się wiersze, których nie ma w tabeli źródłowej. W takim przypadku musisz usunąć wiersze z tabeli docelowej.
- Tabela źródłowa zawiera wiersze z tymi samymi kluczami, co wiersze w tabeli docelowej. Jednak te wiersze mają różne wartości w kolumnach niebędących kluczami. W takim przypadku musisz zaktualizować wiersze w tabeli docelowej wartościami pochodzącymi z tabeli źródłowej.
Poniższy rysunek ilustruje tabele źródłowe i docelowe wraz z odpowiednimi działaniami: wstaw, zaktualizuj i usuń:
Jeśli użyj instrukcji INSERT, UPDATE i DELETE osobno, musisz utworzyć trzy oddzielne instrukcji, aby zaktualizować dane do tabeli docelowej za pomocą pasujących wierszy z tabeli źródłowej.
Jednak SQL Server udostępnia instrukcję MERGE, która umożliwia wykonanie trzech działania w tym samym czasie. Poniżej przedstawiono składnię instrukcji MERGE:
Code language: SQL (Structured Query Language) (sql)
Najpierw określ tabelę docelową i źródło tabela w klauzuli MERGE.
Po drugie, merge_condition określa, w jaki sposób wiersze z tabeli źródłowej są dopasowywane do wiersze z tabeli docelowej. Jest podobny do warunku złączenia w klauzuli join. Zazwyczaj do dopasowania używa się kolumn klucza albo klucza podstawowego, albo klucza unikalnego.
Po trzecie, merge_condition daje w wyniku trzy stany: MATCHED, NOT MATCHED i NOT MATCHED BY SOURCE.
-
MATCHED: są to wiersze spełniające warunek scalania. Na schemacie są one pokazane na niebiesko. W przypadku pasujących wierszy należy zaktualizować kolumny wierszy w tabeli docelowej o wartości z tabeli źródłowej. -
NOT MATCHED: są to wiersze ze źródła tabela, która nie ma żadnych pasujących wierszy w tabeli docelowej. Na schemacie są one zaznaczone na pomarańczowo. W takim przypadku musisz dodać wiersze z tabeli źródłowej do tabeli docelowej. Zwróć uwagę, żeNOT MATCHEDjest również znane jakoNOT MATCHED BY TARGET. -
NOT MATCHED BY SOURCE: są to wiersze w tabeli docelowej, które nie pasują do żadnych wierszy w tabeli źródłowej. Na diagramie są pokazane na zielono. Jeśli chcesz zsynchronizować tabelę docelową z danymi z tabeli źródłowej, musisz użyć tego warunku dopasowania, aby usunąć wiersze z tabeli docelowej.
Przykład instrukcji MERGE programu SQL Server
Załóżmy, że mamy dwie tabele sales.category i sales.category_staging, które przechowują sprzedaż według kategorii produktów.
Aby zaktualizować dane do sales.category (tabeli docelowej) wartościami z sales.category_staging (tabeli źródłowej), użyj następującej MERGE instrukcja:
W tym przykładzie jako warunek scalania użyliśmy wartości w kolumnach category_id w obu tabelach.
- Najpierw wiersze o identyfikatorze 1, 3, 4 z tabeli
sales.category_stagingpasuje do wierszy z tabeli docelowej, dlatego instrukcjaMERGEaktualizuje wartości w kolumnach nazwy kategorii i kwoty w tabelisales.category. - Po drugie, wiersze o identyfikatorach 5 i 6 z tabeli
sales.category_stagingnie istnieją w tabelisales.category, więc instrukcjaMERGEwstawia te wiersze do tabeli docelowej. - Po trzecie, wiersz o identyfikatorze 2 z tabeli
sales.categorynie istnieje w tabelisales.sales_staging, dlategoMERGEusuwa ten wiersz.
W wyniku połączenia dane w tabeli sales.category są w pełni zsynchronizowane z danymi w sales.category_staging table.
W tym samouczku nauczyłeś się, jak używać instrukcji SQL Server MERGE do wprowadzania zmian w tabeli na podstawie pasujących wartości z innej tabeli.