2009-08-27 24 views
18

Często widzę dwa style, INSERT select i wstaw do select, jakie są różnice? Czy oni są tacy sami?różnice między INSERT select i insert into select?

Używam programu SQL Server 2008 Enterprise.

Oto dwie próbki.

INSERT california_authors (au_id, au_lname, au_fname) 
SELECT au_id, au_lname, au_fname 
FROM authors 
WHERE State = 'CA' 

http://www.sqlteam.com/article/using-select-to-insert-records

INSERT INTO Store_Information (store_name, Sales, Date) 
SELECT store_name, Sales, Date 
FROM Sales_Information 

http://www.1keydata.com/sql/sqlinsert.html

z góry dzięki, George

Odpowiedz

25

W SQL Server i MySQL, INTO jest czystym cukrem składniowym.

Bez różnicy.

Oracle i PostgreSQL wymagają tego słowa kluczowego, aby być obecny, a AFAIR, ANSISQL standardy też.

+0

Dzięki, pytanie odpowiedziało. – George2

+0

@MuhammadBabar: jaka jest różnica między zapytaniem a instrukcją? – Quassnoi

+0

Niestety moja wiedza nie była poprawna do wczoraj. Właściwie zapytanie zwróci niektóre dane, a instrukcja nie. –

6

Są takie same; INTO jest opcjonalny.

2

Uważam, że te dwa stwierdzenia, które wymieniłeś, są w rzeczywistości takie same. W pierwszej partii nie ma instrukcji "INTO", ale jest ona implikowana jako część instrukcji INSERT.

Dla celów ilustracyjnych, oto kilka różnych sposobów użycia instrukcji INSERT.

SELECT 
    1 AS ID , 
    'SomeText' AS SomeText 
INTO #tmpTableName 

INSERT INTO #tmpTableName (ID,SomeText) 
SELECT 2, 'Text' 

INSERT INTO #tmpTableName (ID,SomeText) 
VALUES(3, 'MoreText') 

SELECT * FROM #tmpTableName 

DROP TABLE #tmpTableName 
1

SELECT...INTO tworzy nową tabelę, a INSERT...SELECT wymaga istniejącej tabeli. Dlatego należy wziąć pod uwagę implikacje związane z bezpieczeństwem i możliwe problemy z wydajnością.

Również z SELECT...INTO nowa tabela ma te same kolumny, ale bez kluczy ani ograniczeń, więc najlepiej jest po prostu utworzyć tymczasową kopię zapasową.

+2

Nie sądzę, że pyta o SELECT ... INTO. Pyta o INSERT SELECT i INSERT INTO SELECT –

Powiązane problemy