W odpowiedź, do której utworzono link w komentarzach
, jak mam nadzieję jasno wyjaśniłem, nadużywamy MERGE
oświadczenie.
Zapytanie, które tutaj pokazałeś, może zostać w prosty sposób zastąpione przez:
insert into T(Col1) select Col1 from T where ID = 123
Jeśli jednak chcesz mieć możliwość dodania WYJŚCIE klauzula
i to WYJŚCIE
klauzula musi odnosić się zarówno do nowo wstawionych danych i dane z tabeli źródłowej, nie możesz pisać takiej klauzuli na INSERT
oświadczenie.
Dlatego zamiast tego używamy MERGE
oświadczenie, ale nie zgodnie z jego przeznaczeniem. Cały cel to zmuszenie go do wykonania INSERT
i napisz nasze WYJŚCIE
klauzula.
Jeśli przejrzymy dokumentację dla MERGE
, widzimy, że jedyna klauzula, w której możemy określić wykonanie INSERT
znajduje się w GDY NIE DOPASOWANO [WEDŁUG CELU]
klauzula - zarówno w GDY DOPASOWANO
i GDY NIE DOPASOWANO WEDŁUG ŹRÓDŁA
klauzul, nasze jedyne opcje to AKTUALIZACJA
lub USUŃ
.
Więc musimy napisać MERGE
takie, że dopasowanie zawsze kończy się niepowodzeniem - a najprostszym sposobem na to jest stwierdzenie, że dopasowanie powinno nastąpić, gdy 1 =0
- co, miejmy nadzieję, nigdy nie jest.
Ponieważ SQL Server nie obsługuje literów logicznych