Przejdź do treści
Powrót do Centrum Pomocy
Ilustracja artykułu: Merge SQL Server — kompletny przewodnik 2026
Aplikacje Microsoft

Merge SQL Server — kompletny przewodnik 2026

Scalanie danych w SQL Server to jeden z tych mechanizmów, który na pierwszy rzut oka wydaje się prosty — ot, łączymy dwie tabele i po sprawie. W praktyce jednak

14 min czytania·Zaktualizowano dzisiaj
Autor:Piotr ZielińskiSprawdzone przezKatarzyna NowakAktualizacja: 9 czerwca 2026
Faktura VAT 23% + KSeFDostawa 1-3 min e-mailemGwarancja działania klucza5,0 / 5,0(KluczeSoft)

Scalanie danych w SQL Server to jeden z tych mechanizmów, który na pierwszy rzut oka wydaje się prosty — ot, łączymy dwie tabele i po sprawie. W praktyce jednak polecenie MERGE kryje w sobie znacznie więcej niuansów, niż sugerowałaby jego składnia. Niewłaściwie użyte potrafi wprowadzić chaos w bazie danych, zablokować transakcje na długie minuty, a w skrajnych przypadkach — doprowadzić do cichej utraty danych. Jeśli planujesz wdrożenie SQL Server w swojej organizacji, zrozumienie tego mechanizmu to nie opcja — to konieczność.

W tym przewodniku pokazujemy wszystko, co musisz wiedzieć o MERGE w SQL Server w 2026 roku: od podstaw składni, przez zagrożenia wydajnościowe i pułapki równoległości, aż po scenariusze, w których naprawdę warto go użyć — a kiedy lepiej zastąpić go klasycznym podejściem. Tekst bazuje na rzeczywistych doświadczeniach produkcyjnych, błędach zgłaszanych do Microsoftu i aktualnym stanie dokumentacji. Niezależnie od tego, czy dopiero rozważasz zakup licencji SQL Server, czy już pracujesz na wersji 2022 lub 2025 — ten materiał pomoże Ci podejmować lepsze decyzje.

Czym jest MERGE w SQL Server?

MERGE to instrukcja DML (Data Manipulation Language) wprowadzona w SQL Server 2008, która pozwala wykonać operację INSERT, UPDATE lub DELETE w ramach jednego polecenia, na podstawie wyniku złączenia źródła danych z tabelą docelową. Często nazywa się ją "upsertem" — od słów update i insert — choć w rzeczywistości jej możliwości są szersze.

Podstawowa składnia wygląda następująco:

MERGE INTO tabela_docelowa AS cel
USING tabela_zrodlowa AS zrodlo
ON cel.klucz = zrodlo.klucz
WHEN MATCHED AND cel.status = 'aktywny'
    THEN UPDATE SET cel.wartosc = zrodlo.wartosc
WHEN NOT MATCHED BY TARGET
    THEN INSERT (klucz, wartosc) VALUES (zrodlo.klucz, zrodlo.wartosc)
WHEN NOT MATCHED BY SOURCE
    THEN DELETE;

Kluczowym elementem jest klauzula ON, która pełni funkcję warunku złączenia — podobnie jak JOIN. SQL Server porównuje każdy wiersz źródła z każdym wierszem tabeli docelowej według tego warunku, a następnie aplikuje odpowiednie akcje w zależności od wyniku: MATCHED (wiersz istnieje w obu tabelach), NOT MATCHED BY TARGET (wiersz jest tylko w źródle) lub NOT MATCHED BY SOURCE (wiersz istnieje tylko w tabeli docelowej).

Co istotne, MERGE jest operacją atomową — wszystkie akcje wykonywane są w ramach jednej transakcji. To oznacza, że albo wszystkie zmiany zostaną zatwierdzone, albo żadna. Brzmi doskonale, prawda? Niestety, diabeł tkwi w szczegółach.

Dlaczego MERGE budzi kontrowersje? Historia błędów i ostrzeżeń

Gdyby istniała lista najbardziej kontrowersyjnych funkcji SQL Server, MERGE zajmowałby na niej czołowe miejsce. Powód? Przez lata Microsoft zgromadził dziesiątki zgłoszeń błędów dotyczących właśnie tego polecenia. Niektóre z nich prowadziły do naruszenia integralności danych, inne do zakleszczeń, a jeszcze inne do naruszeń ograniczeń klucza głównego, które teoretycznie nie powinny mieć miejsca.

Najgłośniejszy przypadek to błąd opisany przez specjalistów z Microsoftu, w którym MERGE mogło pominąć wiersze podczas jednoczesnego dostępu przy izolacji READ COMMITTED SNAPSHOT. Problem polegał na tym, że w określonych warunkach współbieżnych polecenie zwracało błędne wyniki złączenia, aplikując UPDATE zamiast INSERT lub odwrotnie. Efekt? Cicha korupcja danych — najgorszy możliwy scenariusz w systemie produkcyjnym.

Inny istotny problem dotyczył wyzwalaczy (triggerów). Przy użyciu MERGE wyzwalacze AFTER UPDATE mogły być wywoływane wielokrotnie dla tego samego wiersza, jeśli w trakcie jednego wykonania MERGE ten sam rekord przechodził przez wiele klauzul WHEN MATCHED. Zachowanie to było nieintuicyjne i mogło prowadzić do kaskadowych błędów w systemach silnie opartych na wyzwalaczach.

W odpowiedzi na te problemy społeczność wypracowała nieformalny konsensus: wielu doświadczonych administratorów i deweloperów SQL Server po prostu unika MERGE w systemach produkcyjnych. Niektórzy idą nawet dalej i nazywają je "zepsutym z założenia". Czy słusznie? W 2026 roku sytuacja wygląda już nieco inaczej — większość krytycznych błędów została załatana w wersjach 2019 i 2022 — ale ostrożność nadal jest wskazana.

Składnia MERGE krok po kroku — kompletny przewodnik

Choć MERGE wygląda na pierwszy rzut oka dość prosto, pełna składnia kryje wiele klauzul i opcji, które mogą przesądzić o poprawności i wydajności zapytania. Przyjrzyjmy się jej szczegółowo.

Pierwszym i najważniejszym elementem jest klauzula USING. Może ona wskazywać na tabelę fizyczną, widok, tymczasową tabelę, wyrażenie CTE (Common Table Expression), a nawet konstrukcję VALUES — co jest szczególnie użyteczne przy scalaniu pojedynczych wierszy lub małych, zdefiniowanych na stałe zestawów danych.

Przykład z VALUES:

MERGE INTO Klienci AS cel
USING (VALUES (1, 'Nowak', 'nowak@firma.pl')) AS zrodlo (ID, Nazwisko, Email)
ON cel.ID = zrodlo.ID
WHEN MATCHED THEN UPDATE SET cel.Email = zrodlo.Email
WHEN NOT MATCHED THEN INSERT (ID, Nazwisko, Email)
VALUES (zrodlo.ID, zrodlo.Nazwisko, zrodlo.Email);

Drugi kluczowy aspekt to klauzule warunkowe wewnątrz WHEN. Po słowach WHEN MATCHED możesz dodać AND warunek, który dodatkowo filtruje wiersze — tylko te spełniające podwójny warunek (złączenia i dodatkowy) zostaną objęte akcją. To potężne narzędzie, ale też źródło potencjalnych błędów: zbyt skomplikowane warunki mogą drastycznie obniżyć czytelność kodu i prowadzić do nieoczekiwanych rezultatów.

Trzecia istotna klauzula to OUTPUT. Pozwala ona zwrócić informacje o tym, co dokładnie zostało zmienione — które wiersze zostały zaktualizowane, wstawione lub usunięte. W praktyce produkcyjnej OUTPUT jest nieoceniony przy debugowaniu i audycie:

MERGE INTO Produkty AS cel
USING ProduktyImport AS zrodlo ON cel.Kod = zrodlo.Kod
WHEN MATCHED THEN UPDATE SET cel.Cena = zrodlo.Cena
WHEN NOT MATCHED THEN INSERT (Kod, Cena) VALUES (zrodlo.Kod, zrodlo.Cena)
OUTPUT $action, inserted.Kod, inserted.Cena, deleted.Cena;

Kolumna $action zwraca INSERT, UPDATE lub DELETE, a inserted i deleted to wirtualne tabele dostępne w kontekście OUTPUT, analogicznie do wyzwalaczy. Dzięki temu możesz jednym zapytaniem zarówno zmodyfikować dane, jak i uzyskać pełen raport zmian.

Na koniec warto wspomnieć o ograniczeniach składniowych. Nie możesz użyć MERGE, jeśli tabela docelowa ma włączoną replikację scalania (merge replication) — nazewnictwo jest tu mylące, ale chodzi o dwie zupełnie różne funkcje. Nie możesz też aktualizować kolumn będących częścią warunku ON w klauzuli WHEN MATCHED. Ograniczenia te są istotne przy projektowaniu schematów bazodanowych, zwłaszcza w środowiskach korzystających z replikacji.

Wydajność MERGE — kiedy UPSERT jest szybszy, a kiedy nie

Często słyszy się, że MERGE jest szybsze niż oddzielne UPDATE i INSERT, ponieważ wykonuje tylko jedno skanowanie źródła zamiast dwóch. To prawda — ale tylko w określonych warunkach i przy odpowiednich indeksach.

Testy wydajnościowe przeprowadzone na SQL Server 2022 pokazują, że MERGE rzeczywiście potrafi być o 20–30% szybsze niż równoważna para IF EXISTS + UPDATE / INSERT, szczególnie przy dużych zestawach danych (powyżej 100 tysięcy wierszy). Zysk wynika głównie z pojedynczego odczytu źródła i pojedynczego przejścia przez tabelę docelową.

Jednak ta przewaga szybko topnieje, gdy w grę wchodzi współbieżność. Przy wielu jednoczesnych sesjach wykonujących MERGE na tej samej tabeli, SQL Server często stosuje bardziej restrykcyjne blokady niż przy zwykłych operacjach INSERT czy UPDATE. W skrajnych przypadkach, przy domyślnym poziomie izolacji READ COMMITTED, MERGE może eskalować blokady do poziomu całej tabeli, blokując wszystkie inne operacje. Efekt: zamiast szybszego przetwarzania, dostajesz gigantyczne opóźnienia i sfrustrowanych użytkowników.

Kolejna pułapka wydajnościowa dotyczy planu zapytania. Optymalizator SQL Server ma tendencję do generowania bardziej złożonych planów dla MERGE niż dla osobnych instrukcji. Jeśli statystyki są nieaktualne lub indeksy nieoptymalnie dobrane, MERGE może wybrać skanowanie całej tabeli (table scan) zamiast wykorzystania indeksu, co przy milionach wierszy oznacza katastrofę wydajnościową.

Praktyczna rekomendacja na 2026 rok jest następująca: MERGE rozważaj tylko wtedy, gdy operujesz na dużych zestawach danych wsadowych (batch processing), nie występuje znacząca współbieżność, a tabela docelowa ma odpowiedni indeks klastrowy na kolumnie złączenia. We wszystkich innych przypadkach — szczególnie w systemach OLTP z dużą liczbą jednoczesnych użytkowników — bezpieczniej i często szybciej jest użyć osobnych instrukcji UPDATE, INSERT i DELETE.

Bezpieczne scalanie danych — najlepsze praktyki i wzorce

Jak bezpiecznie korzystać z MERGE, jeśli już zdecydowałeś się na tę składnię? Przede wszystkim, zawsze używaj HOLDLOCK — podpowiedzi blokady, która wymusza blokadę zakresową (range lock) na wierszach spełniających warunek ON. Bez tego hintu MERGE jest podatne na wyścigi (race conditions), w których dwie równoległe sesje mogą próbować wstawić ten sam wiersz, prowadząc do naruszenia klucza głównego.

Poprawna, bezpieczna składnia wygląda tak:

MERGE INTO Zamowienia WITH (HOLDLOCK) AS cel
USING ZamowieniaImport AS zrodlo ON cel.NumerZamowienia = zrodlo.NumerZamowienia
WHEN MATCHED THEN UPDATE SET cel.Status = zrodlo.Status
WHEN NOT MATCHED THEN INSERT (NumerZamowienia, Status) VALUES (zrodlo.NumerZamowienia, zrodlo.Status);

Druga kluczowa praktyka to ograniczenie WHEN NOT MATCHED BY SOURCE. Ta klauzula wykonuje DELETE na wszystkich wierszach tabeli docelowej, które nie mają odpowiednika w źródle. Jeśli przez pomyłkę przekażesz puste źródło, MERGE usunie wszystkie dane z tabeli docelowej — bez ostrzeżenia, bez pytania. Brzmi jak scenariusz katastroficzny, ale zdarza się częściej, niż chciałbyś wiedzieć. Jeśli musisz użyć DELETE w MERGE, zawsze dodawaj dodatkowy warunek ograniczający zakres usuwania.

Trzecia praktyka dotyczy indeksowania. Upewnij się, że kolumna używana w klauzuli ON jest pokryta indeksem unikalnym — najlepiej klastrowym kluczem głównym. Brak indeksu na kolumnie złączenia to prosta droga do skanowania całej tabeli i blokowania wierszy, które nie powinny być dotknięte operacją.

Czwarta, często pomijana praktyka, to testowanie na kopiach produkcyjnych danych, nie na syntetycznych zestawach testowych. MERGE zachowuje się różnie w zależności od rozmiaru danych, ich dystrybucji i poziomu współbieżności — problemy, które nie wystąpią na 1000 wierszy, mogą eksplodować przy 10 milionach.

Piąta praktyka to użycie SET NOCOUNT ON przed MERGE. Zapobiega to zwracaniu zbędnych komunikatów o liczbie zmodyfikowanych wierszy, co w pętlach i procedurach składowanych może niepotrzebnie obciążać sieć i klienta.

Kiedy nie używać MERGE? Alternatywy i porównanie

Są scenariusze, w których MERGE nie tylko nie pomaga, ale wręcz szkodzi. Oto najważniejsze sytuacje, w których należy rozważyć alternatywne podejście.

Systemy o wysokiej współbieżności. Jeśli dziesiątki lub setki sesji jednocześnie modyfikują tę samą tabelę, MERGE z dużym prawdopodobieństwem doprowadzi do eskalacji blokad i drastycznego spadku wydajności. W takich środowiskach lepiej sprawdza się podejście oparte na osobnych instrukcjach z izolacją READ COMMITTED SNAPSHOT (RCSI), które minimalizuje konflikty blokad.

Tabele z wyzwalaczami. Zachowanie wyzwalaczy przy MERGE jest złożone i nie zawsze przewidywalne. Jeśli tabela docelowa ma zdefiniowane wyzwalacze AFTER INSERT, UPDATE lub DELETE, bezpieczniej użyć osobnych instrukcji, gdzie jasno wiadomo, który wyzwalacz zostanie uruchomiony i kiedy.

Operacje złożone, gdzie logika biznesowa wykracza poza proste mapowanie. MERGE jest z założenia operacją deklaratywną — opisujesz co ma się stać, nie jak. Jeśli potrzebujesz niestandardowego logowania, dodatkowych walidacji czy skomplikowanych transformacji przed zapisem, klasyczne podejście z kursorem lub pętlą WHILE daje większą kontrolę, nawet jeśli kosztem wydajności.

Alternatywą numer jeden dla MERGE jest klasyczny wzorzec IF EXISTS + UPDATE / INSERT:

IF EXISTS (SELECT 1 FROM Klienci WHERE ID = @ID)
    UPDATE Klienci SET Email = @Email WHERE ID = @ID;
ELSE
    INSERT INTO Klienci (ID, Email) VALUES (@ID, @Email);

Jest to podejście trywialnie proste, całkowicie przewidywalne pod względem blokad i w pełni bezpieczne przy współbieżności — pod warunkiem że pojedyncza instrukcja INSERT ma zabezpieczenie przed duplikatami (np. WITH (UPDLOCK, SERIALIZABLE) w transakcji).

Dla operacji wsadowych rozsądną alternatywą jest rozbicie procesu na dwa etapy: najpierw UPDATE złączający źródło z tabelą docelową, potem INSERT z warunkiem NOT EXISTS. Przy odpowiednich indeksach wydajność takiego rozwiązania jest bardzo zbliżona do MERGE, a kontrola nad blokadami i zachowaniem — znacznie większa.

MERGE a SQL Server 2025 i Azure SQL — co nowego?

W 2025 roku Microsoft wprowadził kolejną wersję SQL Server (wersja 2025, dostępna również jako Azure SQL Managed Instance), a wraz z nią — kilka zmian mających wpływ na działanie MERGE.

Po pierwsze, poprawiono optymalizator zapytań w zakresie generowania planów dla MERGE. W SQL Server 2025 optymalizator częściej wybiera strategię opartą na złączaniu haszującym (hash join) zamiast złączenia w pętli (nested loop), co przy dużych zestawach danych przekłada się na kilkanaście procent lepszą wydajność. Dotyczy to szczególnie scenariuszy, w których źródło jest stosunkowo duże, a tabela docelowa nie ma idealnego indeksu na kolumnie złączenia.

Po drugie, w odpowiedzi na lata zgłoszeń od społeczności, Microsoft oficjalnie udokumentował zachowanie MERGE przy izolacji READ COMMITTED SNAPSHOT i dostarczył zestaw najlepszych praktyk, w tym rekomendację stosowania HOLDLOCK jako domyślnego zabezpieczenia przed wyścigami. To krok w dobrym kierunku — wcześniej oficjalne stanowisko było dość enigmatyczne.

Po trzecie, w Azure SQL Database wprowadzono funkcję automatycznego indeksowania (automatic tuning), która analizuje zapytania MERGE i sugeruje indeksy optymalizujące warunek ON. To szczególnie przydatne w środowiskach, gdzie MERGE jest używane w ramach procesów ETL (Extract, Transform, Load) — automatyczne rekomendacje indeksów potrafią skrócić czas wykonania nawet o połowę.

Warto też odnotować, że w ekosystemie Microsoft Fabric i Synapse Analytics MERGE zyskuje na znaczeniu jako preferowana metoda incrementalnego ładowania danych z jeziora danych (data lake) do hurtowni. Dzięki natywnemu wsparciu dla formatu Delta Lake i optymalizacji pod kątem operacji na dużych zbiorach, MERGE w tym kontekście faktycznie sprawdza się lepiej niż ręcznie pisane alternatywy.

Częste pytania

Czy MERGE w SQL Server jest bezpieczne w 2026 roku?

W SQL Server 2022 i 2025 większość krytycznych błędów została załatana. MERGE jest bezpieczne pod warunkiem stosowania HOLDLOCK, unikalnego indeksu na kolumnie złączenia i testowania na rzeczywistych danych. Bez tych zabezpieczeń ryzyko wyścigów i naruszeń integralności nadal istnieje.

Jakie błędy najczęściej występują przy MERGE?

Najczęstsze błędy to naruszenie klucza głównego przy jednoczesnym dostępie (rozwiązanie: HOLDLOCK), puste źródło przy klauzuli WHEN NOT MATCHED BY SOURCE skutkujące usunięciem wszystkich danych, oraz eskalacja blokad do poziomu tabeli przy wysokiej współbieżności.

Czy MERGE jest szybsze niż osobne INSERT i UPDATE?

Tak, przy dużych zestawach danych (powyżej 100 tysięcy wierszy) i niskiej współbieżności MERGE może być szybsze nawet o 30%, ponieważ wykonuje pojedyncze skanowanie źródła. Przy wysokiej współbieżności przewaga ta jednak znika ze względu na bardziej restrykcyjne blokady.

Kiedy lepiej unikać MERGE?

Unikaj MERGE w systemach z dużą liczbą jednoczesnych użytkowników (OLTP), przy tabelach z wyzwalaczami oraz gdy logika biznesowa wymaga skomplikowanych transformacji przed zapisem. W takich przypadkach osobne instrukcje dają lepszą kontrolę i przewidywalność.

Czy MERGE wspiera partycjonowane tabele?

Tak, MERGE działa na tabelach partycjonowanych, ale należy zachować ostrożność przy klauzuli WHEN NOT MATCHED BY SOURCE — domyślnie może ona próbować usunąć wiersze ze wszystkich partycji, co przy dużych tabelach bywa katastrofalne wydajnościowo.

Jak sprawdzić, które wiersze zostały zmodyfikowane przez MERGE?

Użyj klauzuli OUTPUT z kolumną $action, która zwraca INSERT, UPDATE lub DELETE. Możesz też odwołać się do wirtualnych tabel inserted i deleted w ramach OUTPUT, aby uzyskać pełen obraz zmian.

Czy MERGE działa z widokami?

Nie, MERGE działa tylko na tabelach fizycznych. Próba użycia MERGE na widoku zakończy się błędem składniowym. Jeśli potrzebujesz podobnej funkcjonalności na widoku, rozważ użycie INSTEAD OF triggerów.

Jaka jest różnica między MERGE a replikacją scalania (merge replication)?

To dwie zupełnie różne funkcje, które przypadkiem dzielą tę samą nazwę. MERGE to instrukcja DML do warunkowego modyfikowania danych. Merge replication to mechanizm synchronizacji danych między wieloma serwerami, umożliwiający dwukierunkową replikację. Co istotne, nie można użyć instrukcji MERGE na tabeli uczestniczącej w replikacji scalania.

Czy można używać MERGE w transakcji z innymi operacjami?

Tak, MERGE może być częścią większej transakcji — ale pamiętaj, że samo MERGE jest już operacją atomową. Dodatkowe instrukcje w tej samej transakcji zwiększają czas trwania blokad i ryzyko zakleszczeń.

Jakie uprawnienia są potrzebne do wykonania MERGE?

Do wykonania MERGE potrzebujesz uprawnień INSERT, UPDATE i DELETE na tabeli docelowej — w zależności od tego, które klauzule WHEN są użyte. Dodatkowo, wymagane jest uprawnienie SELECT na źródle danych.

MERGE w ekosystemie Microsoft — jak licencjonowanie wpływa na wybór narzędzi

Wybór między MERGE a alternatywami nie jest wyłącznie decyzją techniczną — ma również wymiar biznesowy i licencyjny. SQL Server występuje w kilku edycjach: Express (darmowa, z limitem 10 GB na bazę), Standard, Enterprise i Developer. Funkcja MERGE jest dostępna we wszystkich edycjach, łącznie z Express, co czyni ją atrakcyjną dla mniejszych wdrożeń.

Różnica pojawia się jednak na poziomie narzędzi monitorujących i optymalizujących. Funkcje takie jak Query Store (niezbędny do analizy planów zapytań MERGE w czasie), zaawansowane doradztwo indeksów (Missing Index DMVs) czy automatyczne tunowanie (Automatic Plan Correction) są dostępne tylko w wyższych edycjach. Oznacza to, że w edycji Standard możesz napisać MERGE, ale trudniej będzie Ci zdiagnozować, dlaczego działa wolno.

Jeśli Twoja organizacja poważnie myśli o wydajnym przetwarzaniu danych w SQL Server, odpowiednia edycja i licencjonowanie to fundament, na którym opiera się cała reszta. W serwisie kluczesoft.pl znajdziesz pełną ofertę licencji SQL Server — od Standard po Enterprise — wraz ze wsparciem technicznym, które pomoże dobrać edycję optymalną do Twojego scenariusza użycia MERGE i innych operacji bazodanowych.

Sprawdź też

Potrzebujesz licencji? Microsoft SQL Server — sprawdź ofertę KluczeSoft.pl — legalne klucze, faktura VAT, dostawa e-mail.

<!-- INLINE-LINKS-V1 -->

Najczęściej zadawane pytania

W SQL Server 2022 i 2025 większość krytycznych błędów została załatana. `MERGE` jest bezpieczne pod warunkiem stosowania `HOLDLOCK`, unikalnego indeksu na kolumnie złączenia i testowania na rzeczywistych danych. Bez tych zabezpieczeń ryzyko wyścigów i naruszeń integralności nadal istnieje.
Najczęstsze błędy to naruszenie klucza głównego przy jednoczesnym dostępie (rozwiązanie: `HOLDLOCK`), puste źródło przy klauzuli `WHEN NOT MATCHED BY SOURCE` skutkujące usunięciem wszystkich danych, oraz eskalacja blokad do poziomu tabeli przy wysokiej współbieżności.
Tak, przy dużych zestawach danych (powyżej 100 tysięcy wierszy) i niskiej współbieżności `MERGE` może być szybsze nawet o 30%, ponieważ wykonuje pojedyncze skanowanie źródła. Przy wysokiej współbieżności przewaga ta jednak znika ze względu na bardziej restrykcyjne blokady.
Unikaj `MERGE` w systemach z dużą liczbą jednoczesnych użytkowników (OLTP), przy tabelach z wyzwalaczami oraz gdy logika biznesowa wymaga skomplikowanych transformacji przed zapisem. W takich przypadkach osobne instrukcje dają lepszą kontrolę i przewidywalność.
Tak, `MERGE` działa na tabelach partycjonowanych, ale należy zachować ostrożność przy klauzuli `WHEN NOT MATCHED BY SOURCE` — domyślnie może ona próbować usunąć wiersze ze wszystkich partycji, co przy dużych tabelach bywa katastrofalne wydajnościowo.
Użyj klauzuli `OUTPUT` z kolumną `$action`, która zwraca `INSERT`, `UPDATE` lub `DELETE`. Możesz też odwołać się do wirtualnych tabel `inserted` i `deleted` w ramach `OUTPUT`, aby uzyskać pełen obraz zmian.
Nie, `MERGE` działa tylko na tabelach fizycznych. Próba użycia `MERGE` na widoku zakończy się błędem składniowym. Jeśli potrzebujesz podobnej funkcjonalności na widoku, rozważ użycie `INSTEAD OF` triggerów.
To dwie zupełnie różne funkcje, które przypadkiem dzielą tę samą nazwę. `MERGE` to instrukcja DML do warunkowego modyfikowania danych. Merge replication to mechanizm synchronizacji danych między wieloma serwerami, umożliwiający dwukierunkową replikację. Co istotne, nie można użyć instrukcji `MERGE` na tabeli uczestniczącej w replikacji scalania.
Tak, `MERGE` może być częścią większej transakcji — ale pamiętaj, że samo `MERGE` jest już operacją atomową. Dodatkowe instrukcje w tej samej transakcji zwiększają czas trwania blokad i ryzyko zakleszczeń.
Do wykonania `MERGE` potrzebujesz uprawnień `INSERT`, `UPDATE` i `DELETE` na tabeli docelowej — w zależności od tego, które klauzule `WHEN` są użyte. Dodatkowo, wymagane jest uprawnienie `SELECT` na źródle danych.

Czy ten artykuł był pomocny?