110 votes

INSERT vs INSERT INTO

Je travaille avec T-SQL dans MS SQL depuis un certain temps maintenant et, d'une manière ou d'une autre, chaque fois que je dois insérer des données dans une table, j'ai tendance à utiliser la syntaxe :

INSERT INTO myTable <something here>

Je comprends que le mot-clé INTO est facultatif ici et je ne suis pas obligé de l'utiliser mais, d'une manière ou d'une autre, c'est devenu une habitude dans mon cas.

Ma question est la suivante :

  • Y a-t-il des implications à utiliser INSERT syntaxe contre INSERT INTO ?
  • Lequel est entièrement conforme à la norme ?
  • Sont-ils tous deux valables dans d'autres implémentations de la norme SQL ?

111voto

Bill the Lizard Points 147311

INSERT INTO est la norme. Même si INTO est facultatif dans la plupart des implémentations, il est requis dans quelques unes, c'est donc une bonne idée de l'inclure pour assurer la portabilité de votre code.

Vous pouvez trouver des liens vers plusieurs versions de la norme SQL aquí . J'ai trouvé une version HTML d'une ancienne norme aquí .

25voto

Tomalak Points 150423

C'est la même chose, INTO est totalement facultative en T-SQL.

Contrairement aux autres réponses, je pense que cela nuit à la lisibilité d'utiliser INTO .

Je pense que c'est une question de conception : dans ma perception, je n'insère pas un rangée dans une table nommée "Customer", mais je suis en train d'insérer une Client . (Ceci est lié au fait que j'ai l'habitude de nommer mes tables au singulier et non au pluriel).

Si vous suivez le premier concept, INSERT INTO Customer serait très probablement "juste" pour vous.

Si vous suivez le deuxième concept, ce sera probablement INSERT Customer pour vous.

11voto

Tony Andrews Points 67363

Elle peut être facultative dans mySQL, mais elle est obligatoire dans certains autres SGBD, par exemple Oracle. Donc SQL sera plus potentiellement portable avec le mot-clé INTO, pour ce que ça vaut.

5voto

Chensformers Points 1242

En SQL Server 2005, vous pouviez avoir quelque chose entre INSERT et INTO comme ceci :

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

Bien que cela fonctionne sans le INTO, je préfère utiliser le INTO pour des raisons de lisibilité.

4voto

David.Chu.ca Points 7621

Une leçon que j'ai apprise sur ce sujet est qu'il faut toujours rester cohérent ! Si vous utilisez INSERT INTO, n'utilisez pas INSERT également. Si vous ne le faites pas, certains programmeurs risquent de poser à nouveau la même question.

Voici un autre exemple de cas connexe : J'ai eu l'occasion de mettre à jour une procédure stockée très très longue en MS SQL 2005. Le problème est que trop de données ont été insérées dans un tableau de résultats. Je devais trouver d'où venaient ces données. J'ai essayé de trouver où les nouveaux enregistrements étaient ajoutés. Au début de la procédure stockée, j'ai vu plusieurs INSERT INTO. J'ai ensuite essayé de trouver les "INSERT INTO" et de les mettre à jour, mais j'ai manqué un endroit où seul "INSERT" était utilisé. Celui-ci a en fait inséré 4k+ lignes de données vides dans certaines colonnes ! Bien sûr, je devrais simplement rechercher "INSERT". Cependant, cela m'est arrivé. Je blâme le programmeur précédent IDIOT :):)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X