2008-10-24 31 views
72

He estado trabajando con T-SQL en MS SQL desde hace algún tiempo y de alguna manera cada vez que tengo para insertar datos en una tabla que tienden a utilizar la sintaxis:INSERT vs INSERT INTO

INSERT INTO myTable <something here> 

entiendo esa palabra clave INTO es opcional aquí y no tengo que usarlo, pero de alguna manera se convirtió en hábito en mi caso.

Mi pregunta es:

  • ¿Hay implicaciones del uso de la sintaxis INSERT frente INSERT INTO?
  • ¿Cuál cumple completamente con el estándar?
  • ¿Son ambos válidos en otras implementaciones de SQL estándar?

Respuesta

72

INSERT INTO es el estándar. Aunque INTO es opcional en la mayoría de las implementaciones, es necesario en algunas, por lo que es una buena idea incluirlo para garantizar que su código sea portátil.

Puede encontrar enlaces a varias versiones del estándar SQL here. Encontré una versión HTML de un estándar anterior here.

+1

El libro "SQL-99 Complete, Really" dice que Sybase (y por lo tanto MS SQL Server) se comportan de forma no estándar, lo que permite que INTO sea opcional. Otras marcas de base de datos requieren la palabra clave. –

+2

Derecha. Si siempre usa INTO, no necesita recordar cuáles lo consideran opcional. Todas las implementaciones permiten su uso. –

1

Ambos hacen lo mismo. INTO es opcional (en T-SQL de SQL Server) pero ayuda a la legibilidad.

10

Puede ser opcional en mySQL, pero es obligatorio en algunos otros DBMS, por ejemplo Oracle. Por lo tanto, SQL será más potencialmente portátil con la palabra clave INTO, por lo que vale.

18

Son lo mismo, INTO es completamente opcional en T-SQL (otros dialectos de SQL pueden diferir).

Contrariamente a las otras respuestas, creo que afecta la legibilidad para usar INTO.

creo que es una cosa conceptual: En mi percepción, no estoy insertar una filaen una tabla llamada "Cliente", pero estoy en la inserción de un cliente . (Esto está relacionado con el hecho de que uso para nombrar mis tablas en singular, no en plural).

Si sigue el primer concepto, INSERT INTO Customer probablemente "se sienta bien" para usted.

Si sigue el segundo concepto, lo más probable es que sea INSERT Customer para usted.

+5

Creo que el riesgo de su enfoque es que puede llevar a nuevos programadores a confundir objetos con tablas. –

+11

Su respuesta es objetivamente correcta. Es una pena que la gente vote por puntos de vista opuestos. Creo que uno de los beneficios de SO es escuchar esas opiniones diferentes. – DOK

+0

No se trata de pensar en objetos y tablas. Está pensando de una manera conceptual como un modelo relacional de entidad. –

0

Prefiero usarlo. Mantiene la misma sensación de delineación de sintaxis y legibilidad que otras partes del lenguaje SQL, como group BY, order BY.

4

Una de las lecciones que aprendí sobre este tema es que siempre debes mantenerlo constante. Si usa INSERT INTO, no use INSERT también. Si no lo haces, algunos programadores pueden hacer la misma pregunta nuevamente.

Aquí está mi otro caso de ejemplo relacionado: tuve la oportunidad de actualizar un procedimiento almacenado muy largo en MS SQL 2005. El problema es que se insertaron demasiados datos en una tabla de resultados. Tenía que averiguar de dónde provenían los datos. Traté de averiguar dónde se agregaron nuevos registros. En la sección inicial de SP, vi varios INSERT INTOs.Luego traté de encontrar "INSERT INTO" y actualizarlos, pero me perdí un lugar donde solo se utilizó "INSERT". ¡Ese realmente insertó 4k + filas de datos vacíos en algunas columnas! Por supuesto, debería buscar INSERT. Sin embargo, eso me pasó a mí. Culpo al programador anterior IDIOT :) :)

+0

Parece más como el autor lo creó con INSERT INTO y algunos ponen un INSERT en un mantenimiento. Sucede mucho, mucho más de lo que "debería", desafortunadamente. –

0

Si está disponible, use la función estándar. No es que alguna vez necesite portabilidad para su base de datos en particular, pero es probable que necesite portabilidad para su conocimiento de SQL. Un ejemplo particularmente desagradable de T-SQL es el uso de isnull, use coalesce!

3

En SQL Server 2005, puede tener algo en el medio INSERT y dentro de la siguiente manera:

 
INSERT top(5) INTO tTable1 SELECT * FROM tTable2; 

A pesar de que funciona sin la EN, yo prefiero usar EN para facilitar la lectura.

0

Empecé a wtitar SQL en ORACLE, así que cuando veo el código sin INTO simplemente se ve 'roto' y confuso.

Sí, es sólo mi opinión, y no estoy diciendo que debe siempre usar INTO. Pero no deberías saber que muchas otras personas pensarán lo mismo, especialmente si no han comenzado a crear scripts con implementaciones más nuevas.

Con SQL creo que también es muy importante darse cuenta de que ESTÁ agregando una FILA a una TABLA, y no trabajando con objetos. Creo que no sería útil para un desarrollador nuevo pensar en las filas/entradas de la tabla SQL como objetos. De nuevo, solo mi opinión.

Cuestiones relacionadas