Qual è il punto di WHERE 1 = 2 per SELECT INTO query della tabella


39

Se vogliamo creare una nuova tabella da una esistente in SQL Server, possiamo fare quanto segue

SELECT * into Table2
from Table1
WHERE 1=2

Qual è il punto della clausola where? L'ho provato senza la clausola where e ha funzionato bene. Ho visto questo dove la clausola in molti esempi su Internet, ma non il motivo per cui è richiesto.

Risposte:


54

Il motivo per cui si inserisce la WHERE 1=2clausola in quella SELECT INTOquery è creare una copia del campo della tabella esistente senza dati .

Se hai fatto questo:

select *
into Table2
from Table1

Table2sarebbe un duplicato esatto di Table1, comprese le righe di dati. Ma se non si desidera contenere i dati Table1e si desidera solo la struttura della tabella, inserire una WHEREclausola per filtrare tutti i dati.

SELECT INTOCitazione di riferimento BOL :

SELECT ... INTO crea una nuova tabella nel filegroup predefinito e inserisce in essa le righe risultanti dalla query.

Se la WHEREclausola non ha righe risultanti, nessuna verrà inserita nella nuova tabella: Pertanto, si finisce con lo schema duplicato della tabella originale senza dati (che sarebbe il risultato desiderato in questo caso).

Lo stesso effetto può essere ottenuto TOP (0), ad esempio:

select top (0) *
into Table2
from Table1;

Nota : SELECT INTOnon verranno duplicati gli indici, i vincoli, i trigger o lo schema di partizione della tabella di origine.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.