Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Защо имам нужда от частта „съвпадение“ на SQL сливане в този сценарий?

В отговор, към който сте дали връзка в коментарите , както се надявам изясних, ние злоупотребяваме ОБЛИВАНЕ изявление.

Заявката, която сте показали тук, може тривиално да бъде заменена с:

insert into T(Col1) select Col1 from T where ID = 123

Ако обаче искате да можете да добавите ИЗХОД клауза и този OUTPUT клаузата трябва да препраща както към нововмъкнатите данни и данни от таблицата източник, нямате право да пишете такава клауза върху INSERT изявление.

Така че вместо това използваме MERGE изявление, но не по предназначение. Цялата цел е да го принудите да извърши INSERT и напишете нашия ИЗХОД клауза.

Ако разгледаме документацията за MERGE , виждаме, че единствената клауза, в която можем да посочим извършването на INSERT е в КОГАТО НЕ СЪВМЕСТВА [ПО ЦЕЛ] клауза - и в двете WHEN MATCHED и КОГАТО НЕ СЪОТВЕТСТВАТ ПО ИЗТОЧНИК клаузи, нашите единствени опции са да АКТУАЛИЗИРАМЕ или ИЗТРИВАНЕ .

И така, трябва да напишем MERGE така че съпоставянето винаги е неуспешно - и най-простият начин да направите това е да кажете, че съвпадението трябва да се случи, когато 1 =0 - което, надяваме се, никога не е така.

Тъй като SQL Server не поддържа булеви литерали




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL заявка за времеви интервали. Синтактични грешки.

  2. SqlConnection.Close() в израза за използване

  3. Опресняване на метаданни на потребителски функции t-SQL

  4. Осигуряване на SQL Server срещу множествено присъединяване

  5. Грешка при възстановяване на база данни на SQL Server:посоченото предаване не е валидно. (SqlManagerUI)