No resposta à qual você vinculou nos comentários , como espero ter deixado claro, estamos abusando o
MERGE declaração. A consulta que você mostrou aqui poderia ser substituída trivialmente por:
insert into T(Col1) select Col1 from T where ID = 123
No entanto, se você quiser adicionar uma
OUTPUT cláusula
, e que OUTPUT cláusula precisa referenciar os dados recém-inseridos e dados da tabela de origem, você não tem permissão para escrever tal cláusula em um INSERT declaração. Então, em vez disso, usamos um
MERGE declaração, mas não para o propósito pretendido. Todo o propósito é forçá-lo a executar um INSERT e escreva nosso OUTPUT cláusula. Se examinarmos a documentação para
MERGE
, vemos que a única cláusula na qual podemos especificar para executar um INSERT está no WHEN NOT MATCHED [BY TARGET] cláusula - tanto no WHEN MATCHED e QUANDO NÃO CORRESPONDIDO PELA FONTE cláusulas, nossas únicas opções são UPDATE ou EXCLUIR . Então, temos que escrever o
MERGE tal que a correspondência sempre falha - e a maneira mais simples de fazer isso é dizer que a correspondência deve ocorrer quando 1 =0 - o que, espero, nunca é. Como o SQL Server não oferece suporte a literais booleanos