Qual é o objetivo de WHERE 1 = 2 para a consulta da tabela SELECT INTO

39

Se queremos criar uma nova tabela a partir de uma existente no SQL Server, podemos fazer o seguinte

SELECT * into Table2
from Table1
WHERE 1=2

Qual é o ponto da cláusula where? Eu tentei sem a cláusula where e funcionou bem. Eu já vi essa cláusula where em muitos exemplos na internet, mas não a razão pela qual ela é necessária.

Muhammad Hasan Khan
fonte

Respostas:

54

O motivo pelo qual você colocou a WHERE 1=2cláusula nessa SELECT INTOconsulta é criar uma cópia de campo da tabela existente sem dados .

Se você fez isso:

select *
into Table2
from Table1

Table2seria uma duplicata exata de Table1, incluindo as linhas de dados. Mas se você não deseja que os dados contidos Table1e apenas a estrutura da tabela, coloque uma WHEREcláusula para filtrar todos os dados.

BOL SELECT INTOReferência :

SELECT… INTO cria uma nova tabela no grupo de arquivos padrão e insere as linhas resultantes da consulta nele.

Se sua WHEREcláusula não tiver linhas resultantes, nenhuma será inserida na nova tabela: Portanto, você terminará com o esquema duplicado da tabela original sem dados (o que seria o resultado desejado nesse caso).

O mesmo efeito pode ser alcançado com TOP (0), por exemplo:

select top (0) *
into Table2
from Table1;

Nota : O SELECT INTOnão duplicará os índices, restrições, gatilhos ou esquema de partição da tabela de origem.

Thomas Stringer
fonte