Jaki jest cel WHERE 1 = 2 dla zapytania SELECT INTO do tabeli

39

Jeśli chcemy utworzyć nową tabelę z istniejącej w SQL Server, możemy wykonać następujące czynności

SELECT * into Table2
from Table1
WHERE 1=2

Po co klauzula? Próbowałem bez klauzuli where i działało dobrze. Widziałem to w wielu przypadkach w Internecie w klauzuli, ale nie było powodu, dla którego jest ona wymagana.

Muhammad Hasan Khan
źródło

Odpowiedzi:

54

Powodem umieszczenia WHERE 1=2klauzuli w tym SELECT INTOzapytaniu jest utworzenie kopii pola istniejącej tabeli bez danych .

Jeśli to zrobiłeś:

select *
into Table2
from Table1

Table2byłby dokładnym duplikatem Table1, w tym wierszy danych. Ale jeśli nie chcesz, aby dane były w nim zawarte Table1, a po prostu chcesz struktury tabeli, umieść WHEREklauzulę, aby odfiltrować wszystkie dane.

SELECT INTOCytat referencyjny BOL :

WYBIERZ… INTO tworzy nową tabelę w domyślnej grupie plików i wstawia do niej wynikowe wiersze z zapytania.

Jeśli twoja WHEREklauzula nie ma wynikowych wierszy, żaden nie zostanie wstawiony do nowej tabeli: W rezultacie otrzymujesz duplikat schematu oryginalnej tabeli bez danych (co w tym przypadku byłoby pożądanym rezultatem).

Ten sam efekt można osiągnąć TOP (0)na przykład:

select top (0) *
into Table2
from Table1;

Uwaga : SELECT INTONie powiela indeksów tabeli ograniczeń, ograniczeń, wyzwalaczy ani schematu partycji.

Thomas Stringer
źródło