¿Cuál es el punto de WHERE 1 = 2 para la consulta de tabla SELECT INTO?

39

Si queremos crear una nueva tabla a partir de una existente en SQL Server, podemos hacer lo siguiente

SELECT * into Table2
from Table1
WHERE 1=2

¿Cuál es el punto de dónde cláusula? Lo intenté sin la cláusula where y funcionó bien. He visto esta cláusula where en muchos ejemplos en internet, pero no la razón por la que se requiere.

Muhammad Hasan Khan
fuente

Respuestas:

54

La razón por la que coloca la WHERE 1=2cláusula en esa SELECT INTOconsulta es para crear una copia de campo de la tabla existente sin datos .

Si hiciste esto:

select *
into Table2
from Table1

Table2sería un duplicado exacto de Table1, incluidas las filas de datos. Pero si no desea que se incluyan los datos Table1y solo desea la estructura de la tabla, debe poner una WHEREcláusula para filtrar todos los datos.

SELECT INTOCita de referencia de BOL :

SELECT ... INTO crea una nueva tabla en el grupo de archivos predeterminado e inserta en ella las filas resultantes de la consulta.

Si su WHEREcláusula no tiene filas resultantes, ninguna se insertará en la nueva tabla: por lo tanto, terminará con el esquema duplicado de la tabla original sin datos (que sería el resultado deseado en este caso).

Se puede lograr el mismo efecto con TOP (0), por ejemplo:

select top (0) *
into Table2
from Table1;

Nota : El SELECT INTOno duplicará los índices, restricciones, disparadores o esquema de partición de la tabla fuente.

Thomas Stringer
fuente