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