it-swarm.com.de

INSERT vs INSERT INTO

Ich arbeite seit einiger Zeit mit T-SQL in MS SQL und irgendwie immer, wenn ich Daten in eine Tabelle einfügen muss. Ich neige dazu, die Syntax zu verwenden:

INSERT INTO myTable <something here>

Ich verstehe, dass das Keyword INTO hier optional ist und ich es nicht verwenden muss, aber es hat sich in meinem Fall irgendwie zur Gewohnheit entwickelt.

Meine Frage ist: 

  • Gibt es Auswirkungen auf die Verwendung der INSERT-Syntax im Vergleich zu INSERT INTO?
  • Welches entspricht voll und ganz dem Standard?
  • Sind beide in anderen Implementierungen des SQL-Standards gültig?
78
kristof

INSERT INTO ist der Standard. Auch wenn INTO in den meisten Implementierungen optional ist, ist es in einigen wenigen Fällen erforderlich. Aus diesem Grund ist es eine gute Idee, sie einzufügen, um sicherzustellen, dass Ihr Code portierbar ist.

Links zu mehreren Versionen des SQL-Standards finden Sie hier . Ich habe eine HTML-Version eines älteren Standards hier gefunden.

82
Bill the Lizard

Sie sind dasselbe, INTO ist in T-SQL vollständig optional (andere SQL-Dialekte können abweichen).

Im Gegensatz zu den anderen Antworten, denke ich, beeinträchtigt die Verwendung von INTO die Lesbarkeit.

Ich denke, es ist eine konzeptionelle Sache: In meiner Wahrnehmung füge ich nicht eine Zeile in eine Tabelle mit dem Namen "Customer" ein, sondern einen Customer . (Dies hängt damit zusammen, dass ich meine Tabellen im Singular benenne, nicht im Plural).

Wenn Sie dem ersten Konzept folgen, würde sich INSERT INTO Customer höchstwahrscheinlich für Sie "richtig" fühlen.

Wenn Sie dem zweiten Konzept folgen, ist es höchstwahrscheinlich INSERT Customer für Sie.

20
Tomalak

Es kann in mySQL optional sein, in anderen DBMSs, z. B. Oracle, ist es jedoch obligatorisch. Daher ist SQL mit dem INTO-Schlüsselwort möglicherweise portabler, was es wert ist.

10
Tony Andrews

Eine Lektion, die ich zu diesem Thema gelernt habe, ist, dass Sie es immer konsistent halten sollten! Wenn Sie INSERT INTO verwenden, verwenden Sie auch nicht INSERT. Wenn Sie dies nicht tun, stellen einige Programmierer möglicherweise dieselbe Frage erneut.

Hier ist ein weiterer verwandter Beispielfall: Ich hatte die Möglichkeit, eine sehr lange gespeicherte Prozedur in MS SQL 2005 zu aktualisieren. Das Problem ist, dass zu viele Daten in eine Ergebnistabelle eingefügt wurden. Ich musste herausfinden, woher die Daten kamen. Ich habe versucht herauszufinden, wo neue Datensätze hinzugefügt wurden. Am Anfang von SP habe ich mehrere INSERT INTOs gesehen. Dann habe ich versucht, "INSERT INTO" zu finden und zu aktualisieren, aber ich habe einen Ort vermisst, an dem nur "INSERT" verwendet wurde. Dieser hat tatsächlich 4k + Zeilen leerer Daten in einige Spalten eingefügt! Natürlich sollte ich einfach nach INSERT suchen. Das ist mir jedoch passiert. Ich beschuldige den vorherigen Programmierer IDIOT :) :)

4
David.Chu.ca

In SQL Server 2005 könnte zwischen INSERT und INTO Folgendes stehen:

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

Obwohl es ohne das INTO funktioniert, ziehe ich es vor, INTO aus Gründen der Lesbarkeit zu verwenden. 

3
devXen

Sie machen beide dasselbe. INTO ist optional (in SQL Server T-SQL), unterstützt jedoch die Lesbarkeit.

1
DOK

Falls verfügbar, verwenden Sie die Standardfunktion. Nicht, dass Sie jemals Portabilität für Ihre bestimmte Datenbank benötigen, aber die Chancen sind, dass Sie Portabilität für Ihr SQL-Wissen benötigen. Ein besonderes böses T-SQL-Beispiel ist die Verwendung von isnull.

0
Tom

Ich habe angefangen, SQL auf Oracle zu schreiben. Wenn ich also Code ohne INTO sehe, sieht er einfach "kaputt" und verwirrend aus.

Ja, es ist nur meine Meinung und ich sage nicht, dass Sie immer INTO verwenden sollten . Aber Sie sollten sich nicht darüber im Klaren sein, dass viele andere Leute wahrscheinlich dasselbe denken, besonders wenn sie noch nicht mit neueren Implementierungen angefangen haben, Skripte zu schreiben.

Bei SQL ist es meines Erachtens auch sehr wichtig zu wissen, dass Sie einer TABELLE eine REIHE hinzufügen und nicht mit Objekten arbeiten. Ich denke, es wäre für einen neuen Entwickler nicht hilfreich, sich SQL-Tabellenzeilen/-einträge als Objekte vorzustellen. Wieder nur meine Meinung.

0
Garry_G

Ich ziehe es vor, es zu benutzen. Es behält das gleiche Syntax-Abgrenzungsgefühl und die gleiche Lesbarkeit wie andere Teile der SQL-Sprache wie group BY, order BY.

0
AgentThirteen