En el respuesta a la que se ha vinculado en los comentarios
, como espero haber dejado claro, estamos abusando el MERGE
declaración.
La consulta que has mostrado aquí podría ser reemplazada trivialmente por:
insert into T(Col1) select Col1 from T where ID = 123
Sin embargo, si desea poder agregar un OUTPUT
cláusula
, y esa OUTPUT
la cláusula debe hacer referencia a los datos recién insertados y datos de la tabla de origen, no está permitido escribir una cláusula de este tipo en un INSERT
declaración.
Entonces, en su lugar usamos un MERGE
declaración, pero no para el propósito previsto. Todo el propósito es forzarlo a realizar un INSERT
y escribir nuestra OUTPUT
cláusula.
Si examinamos la documentación de MERGE
, vemos que la única cláusula en la que podemos especificar para realizar un INSERT
está en WHEN NOT MATCHED [BY TARGET]
cláusula - tanto en WHEN MATCHED
y WHEN NOT MATCHED BY SOURCE
cláusulas, nuestras únicas opciones son UPDATE
o DELETE
.
Entonces, tenemos que escribir el MERGE
tal que la coincidencia siempre falla, y la forma más sencilla de hacerlo es decir que la coincidencia debe ocurrir cuando 1 = 0
- que, con suerte, nunca será.
Dado que SQL Server no admite literales booleanos