In de antwoord waarnaar u heeft gelinkt in de opmerkingen
, zoals ik hopelijk duidelijk heb gemaakt, misbruiken de MERGE
verklaring.
De zoekopdracht die u hier heeft weergegeven, kan triviaal worden vervangen door:
insert into T(Col1) select Col1 from T where ID = 123
Als u echter een OUTPUT
clausule
, en dat OUTPUT
clausule moet verwijzen naar zowel de nieuw ingevoegde gegevens en gegevens uit de brontabel, mag u zo'n clausule niet schrijven op een INSERT
verklaring.
Dus gebruiken we in plaats daarvan een MERGE
verklaring, maar niet voor het beoogde doel. Het hele doel is om het te dwingen een INSERT
. uit te voeren en schrijf onze OUTPUT
clausule.
Als we de documentatie voor MERGE
onderzoeken
, zien we dat de enige clausule waarin we kunnen specificeren om een INSERT
. uit te voeren is in de WHEN NOT MATCHED [BY TARGET]
clausule - in zowel de WHEN MATCHED
en WHEN NOT MATCHED BY SOURCE
clausules, zijn onze enige opties om UPDATE
of DELETE
.
We moeten dus de MERGE
. schrijven zodat het matchen altijd mislukt - en de eenvoudigste manier om dat te doen is door te zeggen dat het matchen moet plaatsvinden wanneer 1 = 0
- wat hopelijk nooit is.
Aangezien SQL Server boolean literalen niet ondersteunt