Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Dlaczego w tym scenariuszu potrzebuję części „dopasuj” scalania SQL?

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




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Kursor wewnątrz kursora

  2. if warunek w zapytaniu o aktualizację serwera sql

  3. Jak zwrócić ciąg w odwrotnej kolejności za pomocą SQL Server – REVERSE()

  4. Odpowiednik OFFSET w SQL Server

  5. Sql Server odpowiednik funkcji agregującej LICZ.JEŻELI