2009-08-27 39 views
18

A menudo veo dos estilos, INSERTo selecciono e inserto en seleccionar, ¿cuáles son las diferencias? ¿Son lo mismo?diferencias entre INSERT seleccionar e insertar en seleccionar?

Estoy usando SQL Server 2008 Enterprise.

Aquí hay dos muestras.

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

gracias de antemano, George

Respuesta

25

En SQL Server y , INTO es sintaxis pura azúcar.

Sin diferencia.

Oracle y PostgreSQL requieren esta palabra clave para estar presentes, y, AFAIR, ANSISQL normas también lo hacen.

+0

Gracias, la pregunta fue respondida. – George2

+0

@MuhammadBabar: ¿cuál es la diferencia entre una consulta y una declaración? – Quassnoi

+0

Lo siento, mi conocimiento no era correcto hasta ayer. En realidad, la consulta arrojará algunos datos, mientras que la declaración no lo hará. –

6

Son la misma; el INTO es simplemente opcional.

2

Creo que las dos afirmaciones que ha enumerado son de hecho las mismas. La instrucción "INTO" falta en el primer lote, pero está implícita como parte de la instrucción INSERT.

A modo ilustrativo, aquí hay algunas formas diferentes de utilizar la instrucción 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 nueva tabla, mientras que INSERT...SELECT requiere una tabla existente. Entonces hay implicaciones de seguridad y posibles problemas de rendimiento a considerar.

Además, con SELECT...INTO, la nueva tabla tiene las mismas columnas pero no tiene claves ni restricciones, por lo que es mejor simplemente crear una copia de seguridad temporal.

+2

No creo que pregunte por SELECT ... INTO. Está preguntando sobre INSERT SELECT e INSERT INTO SELECT –

Cuestiones relacionadas