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