Im Antwort, die Sie in den Kommentaren verlinkt haben
, wie ich hoffentlich deutlich gemacht habe, missbrauchen wir das MERGE
Aussage.
Die hier gezeigte Abfrage könnte trivialerweise ersetzt werden durch:
insert into T(Col1) select Col1 from T where ID = 123
Wenn Sie jedoch eine OUTPUT
Klausel
, und das OUTPUT
-Klausel muss auf die neu eingefügten Daten und verweisen Daten aus der Quelltabelle, dürfen Sie eine solche Klausel nicht in ein INSERT
schreiben Aussage.
Also verwenden wir stattdessen ein MERGE
Aussage, aber nicht für den beabsichtigten Zweck. Der gesamte Zweck besteht darin, es zu zwingen, ein INSERT
auszuführen und schreiben Sie unsere OUTPUT
Klausel.
Wenn wir die Dokumentation für MERGE
untersuchen
, sehen wir, dass dies die einzige Klausel ist, in der wir angeben können, dass ein INSERT
ausgeführt werden soll ist in WHEN NOT MATCHED [BY TARGET]
-Klausel - sowohl in WHEN MATCHED
und WHEN NOT MATCHED BY SOURCE
-Klauseln sind unsere einzigen Optionen UPDATE
oder DELETE
.
Also müssen wir den MERGE
schreiben so dass der Abgleich immer fehlschlägt - und der einfachste Weg, dies zu tun, ist zu sagen, dass der Abgleich erfolgen sollte, wenn 1 = 0
- was hoffentlich nie der Fall ist.
Da SQL Server boolesche Literale nicht unterstützt