2011-12-19 14 views
23

Say table1 i table2 już istnieje, jest jakaś różnica między tymi zapytaniamiSQL Server 'select * w' kontra „insert into ..wybierz *

QUERY1: -

select * into table1 from table2 where 1=1 

QUERY2: -

insert into table1 select * from table2 
+5

możliwe duplikat [INSERT INTO vs SELECT INTO] (http://stackoverflow.com/questions/6947983/insert-into-vs-select -into) i kilku innych – gbn

Odpowiedz

41

select * into table1 from table2 where 1=1 tworzy tabelę1 i wstawia w nich wartości tabeli 2. Tak więc, jeśli tabela jest już utworzona, ta instrukcja spowodowałaby błąd.

Dodaje tylko wartości z tabeli 2 w tabeli1.

+2

Nie wiedziałem o błędzie, który byłby generowany przez zapytanie-1, gdyby tabela istniała. Dziękuję Ci bardzo ! –

7

pierwszy z nich (SELECT INTO) stworzy i wypełnić nową tabelę drugi (INSERT... SELECT) wstawia do istniejącej tabeli.

W wersjach SQL Server sprzed roku 2008 pierwszy może być minimalnie zalogowany, a drugi nie, ale nie jest to this is no longer true.

3

W QUERY2 tabela table1koniecznością istnieć przed uruchomieniem komendy

W Kwerenda1, table1 zostanie utworzony lub błąd zostanie wyrzucony jeśli już istnieje

4
select * into table1 from table2 where 1=1 

zapytaniu powyższemu wymaga, aby tabela NIE istniała. Nie trzeba określać kolumn, ponieważ wszystkie kolumny są tworzone, ponieważ są pobierane z tabeli źródłowej.

insert into table1 select * from table2 

Dla powyższego zapytania potrzebna jest EXISTING table1. Kolumny w obu tabelach powinny być w dokładnie tej samej kolejności, w przeciwnym razie należy podać listę kolumn dla obu tabel.

1
INSERT INTO TABLE_A SELECT * FROM TABLE_B 

Jest to często używane zdanie, które służy do wstawiania wartości tabeli do innej tabeli. Wybrane kolumny można również wstawiać za pomocą tego.

SELECT * INTO TABLE_A FROM TABLE_B 

utworzenie nowego table_a wypełniany z wartościami table_b

Powiązane problemy