В отговор, към който сте дали връзка в коментарите
, както се надявам изясних, ние злоупотребяваме ОБЛИВАНЕ
изявление.
Заявката, която сте показали тук, може тривиално да бъде заменена с:
insert into T(Col1) select Col1 from T where ID = 123
Ако обаче искате да можете да добавите ИЗХОДкод> клауза
и този OUTPUT
клаузата трябва да препраща както към нововмъкнатите данни и данни от таблицата източник, нямате право да пишете такава клауза върху INSERT
изявление.
Така че вместо това използваме MERGE
изявление, но не по предназначение. Цялата цел е да го принудите да извърши INSERT
и напишете нашия ИЗХОД
клауза.
Ако разгледаме документацията за MERGE
, виждаме, че единствената клауза, в която можем да посочим извършването на INSERT
е в КОГАТО НЕ СЪВМЕСТВА [ПО ЦЕЛ]
клауза - и в двете WHEN MATCHED
и КОГАТО НЕ СЪОТВЕТСТВАТ ПО ИЗТОЧНИК
клаузи, нашите единствени опции са да АКТУАЛИЗИРАМЕ
или ИЗТРИВАНЕ
.
И така, трябва да напишем MERGE
така че съпоставянето винаги е неуспешно - и най-простият начин да направите това е да кажете, че съвпадението трябва да се случи, когато 1 =0
- което, надяваме се, никога не е така.
Тъй като SQL Server не поддържа булеви литерали