Quel est le point de WHERE 1 = 2 pour la requête de table SELECT INTO

39

Si nous voulons créer une nouvelle table à partir d’une table existante dans SQL Server, nous pouvons procéder comme suit:

SELECT * into Table2
from Table1
WHERE 1=2

Quel est le point de la clause Where? Je l'ai essayé sans la clause where et tout s'est bien passé. J'ai vu cette clause dans de nombreux exemples sur Internet, mais pas la raison pour laquelle elle est requise.

Muhammad Hasan Khan
la source

Réponses:

54

La raison pour laquelle vous avez inséré la WHERE 1=2clause dans cette SELECT INTOrequête est la création d'une copie de champ de la table existante sans données .

Si vous avez fait ceci:

select *
into Table2
from Table1

Table2serait une copie exacte de Table1, y compris les lignes de données. Mais si vous ne voulez pas que les données soient contenues Table1, et que vous voulez juste la structure de la table, vous mettez une WHEREclause pour filtrer toutes les données.

BOL SELECT INTORéférence citation:

SELECT… INTO crée une nouvelle table dans le groupe de fichiers par défaut et y insère les lignes résultantes de la requête.

Si votre WHEREclause n'a pas de lignes résultantes, aucune ne sera insérée dans la nouvelle table: vous vous retrouvez donc avec le schéma en double de la table d'origine sans données (ce qui serait le résultat souhaité dans ce cas).

Le même effet peut être obtenu avec TOP (0), par exemple:

select top (0) *
into Table2
from Table1;

Remarque : SELECT INTOCela ne dupliquera pas les index, contraintes, déclencheurs ou schéma de partition de la table source.

Thomas Stringer
la source