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 MATCHED
jest 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_staging
pasuje do wierszy z tabeli docelowej, dlatego instrukcjaMERGE
aktualizuje wartości w kolumnach nazwy kategorii i kwoty w tabelisales.category
. - Po drugie, wiersze o identyfikatorach 5 i 6 z tabeli
sales.category_staging
nie istnieją w tabelisales.category
, więc instrukcjaMERGE
wstawia te wiersze do tabeli docelowej. - Po trzecie, wiersz o identyfikatorze 2 z tabeli
sales.category
nie istnieje w tabelisales.sales_staging
, dlategoMERGE
usuwa 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.