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:

  1. 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.
  2. W tabeli docelowej znajdują się wiersze, których nie ma w tabeli źródłowej. W takim przypadku musisz usunąć wiersze z tabeli docelowej.
  3. 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ę, że NOT MATCHED jest również znane jako NOT 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 instrukcja MERGE aktualizuje wartości w kolumnach nazwy kategorii i kwoty w tabeli sales.category.
  • Po drugie, wiersze o identyfikatorach 5 i 6 z tabeli sales.category_staging nie istnieją w tabeli sales.category, więc instrukcja MERGE wstawia te wiersze do tabeli docelowej.
  • Po trzecie, wiersz o identyfikatorze 2 z tabeli sales.category nie istnieje w tabeli sales.sales_staging, dlatego MERGE 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.

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *