2009-08-27 19 views
18

Spesso vedo due stili, INSERISCI seleziona e inserisci in selezione, quali sono le differenze? Sono gli stessi?differenze tra INSERT select e insert in select?

Sto utilizzando SQL Server 2008 Enterprise.

Ecco due esempi.

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

grazie in anticipo, George

risposta

25

In SQL Server e MySQL, INTO è puro zucchero di sintassi.

Nessuna differenza.

Oracle e PostgreSQL richiedono questa parola chiave per essere presente, e, AFAIR, ANSISQL standard fanno troppo.

+0

Grazie, risposta alla domanda. – George2

+0

@MuhammadBabar: qual è la differenza tra una query e una dichiarazione? – Quassnoi

+0

Scusa, la mia conoscenza non è stata corretta fino a ieri. In realtà la query restituirà alcuni dati mentre l'istruzione non lo farà. –

6

Sono la stessa; il INTO è solo opzionale.

2

Credo che le due dichiarazioni che hai elencato siano in effetti le stesse. L'istruzione "INTO" è mancante nel primo batch ma è implicita come parte dell'istruzione INSERT.

A scopo illustrativo, ecco alcune forme diverse di utilizzo dell'istruzione 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 crea una nuova tabella, mentre INSERT...SELECT richiede una tabella esistente. Quindi ci sono implicazioni sulla sicurezza e possibili problemi di prestazioni da considerare.

Inoltre, con SELECT...INTO, la nuova tabella ha le stesse colonne ma senza chiavi o vincoli, quindi è preferibile creare semplicemente un backup temporaneo.

+2

Non penso che stia chiedendo di SELECT ... INTO. Sta chiedendo di INSERT SELECT e INSERT INTO SELECT –

Problemi correlati