V odpověď, na kterou jste odkazovali v komentářích
, jak jsem snad již objasnil, zneužíváme SLOUČIT
prohlášení.
Dotaz, který jste zde zobrazili, lze triviálně nahradit:
insert into T(Col1) select Col1 from T where ID = 123
Pokud však chcete mít možnost přidat OUTPUT doložka
a VÝSTUP
klauzule musí odkazovat na nově vložená data a data ze zdrojové tabulky, nemůžete takovou klauzuli napsat do INSERT
prohlášení.
Místo toho tedy používáme MERGE
prohlášení, ale ne pro zamýšlený účel. Celý účel je donutit jej provést INSERT
a napište náš OUTPUT
doložka.
Pokud prozkoumáme dokumentaci pro MERGE
, vidíme, že jediná klauzule, ve které můžeme zadat provedení INSERT
je v KDYŽ NENÍ SHODA [PODLE CÍLE]
klauzule - v obou WHEN MATCHED
a KDYŽ NENÍ SHODA PODLE ZDROJA
klauzule, naše jediná možnost je UPDATE
nebo DELETE
.
Musíme tedy napsat MERGE
takové, že shoda vždy selže – a nejjednodušší způsob, jak to udělat, je říci, že shoda by měla nastat, když 1 =0
- což, doufejme, nikdy není.
Protože SQL Server nepodporuje booleovské literály