sql >> Base de Datos >  >> RDS >> Sqlserver

¿Por qué necesito la parte 'coincidencia' de una combinación de SQL, en este escenario?

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