INSERT vs INSERT INTO


90

Lavoro con T-SQL in MS SQL da un po 'di tempo e in qualche modo ogni volta che devo inserire dati in una tabella tendo a usare la sintassi:

INSERT INTO myTable <something here>

Capisco che la parola chiave INTOè facoltativa qui e non devo usarla, ma in qualche modo è diventata un'abitudine nel mio caso.

La mia domanda è:

  • Ci sono implicazioni nell'utilizzo della INSERTsintassi rispetto a INSERT INTO?
  • Quale è pienamente conforme allo standard?
  • Sono entrambi validi in altre implementazioni dello standard SQL?

Risposte:


94

INSERT INTOè lo standard. Anche se INTOè opzionale nella maggior parte delle implementazioni, è richiesto in alcune, quindi è una buona idea includerlo per garantire che il codice sia portabile.

È possibile trovare collegamenti a diverse versioni dello standard SQL qui . Ho trovato una versione HTML di uno standard precedente qui .


2
Il libro "SQL-99 Complete, Really" dice che Sybase (e quindi MS SQL Server) si comportano in modo non standard, consentendo a INTO di essere opzionale. Altre marche di database richiedono la parola chiave.
Bill Karwin

2
Destra. Se usi sempre INTO, non hai bisogno di ricordare quali lo considerano opzionale. Tutte le implementazioni ne consentono l'utilizzo.
Bill the Lizard

21

Sono la stessa cosa, INTOè completamente opzionale in T-SQL (altri dialetti SQL possono differire).

Contrariamente alle altre risposte, penso che comprometta la leggibilità d'uso INTO.

Penso che sia una cosa concettuale: nella mia percezione, non sto inserendo un file riga in una tabella denominata "Cliente", ma sto inserendo un Cliente . (Questo è collegato al fatto che uso per nominare le mie tabelle al singolare, non al plurale).

Se segui il primo concetto, INSERT INTO Customermolto probabilmente "ti sembrerebbe giusto".

Se segui il secondo concetto, molto probabilmente sarà INSERT Customerper te.


5
Penso che il rischio con il tuo approccio sia quello di portare nuovi programmatori a confondere gli oggetti con le tabelle.
Dave DuPlantis

12
La tua risposta è effettivamente corretta. È un peccato quando le persone votano contro punti di vista opposti. Penso che uno dei vantaggi di SO sia ascoltare quelle opinioni diverse.
DOK

Non è questione di pensare in oggetti e tabelle. È pensare in modo concettuale come un modello relazionale di entità.
Andre Figueiredo

@DaveDuPlantis Ah, l'errore di Jackie Corno d'Albero. +1
ruffin

10

Può essere facoltativo in mySQL, ma è obbligatorio in alcuni altri DBMS, ad esempio Oracle. Quindi SQL sarà potenzialmente più portabile con la parola chiave INTO, per quello che vale.


4

Una lezione che ho appreso su questo problema è che dovresti sempre mantenerlo coerente! Se usi INSERT INTO, non usare anche INSERT. Se non lo fai, alcuni programmatori potrebbero porre di nuovo la stessa domanda.

Ecco un altro caso di esempio correlato: ho avuto la possibilità di aggiornare una stored procedure molto molto lunga in MS SQL 2005. Il problema è che sono stati inseriti troppi dati in una tabella dei risultati. Ho dovuto scoprire da dove provenissero i dati. Ho provato a scoprire dove sono stati aggiunti nuovi record. Nella sezione iniziale di SP, ho visto diversi INSERT INTO. Poi ho provato a trovare "INSERT INTO" e li ho aggiornati, ma ho perso un punto in cui è stato utilizzato solo "INSERT". Quello in realtà ha inserito 4k + righe di dati vuoti in alcune colonne! Ovviamente dovrei solo cercare INSERT. Tuttavia, è successo a me. Do la colpa al precedente programmatore IDIOT :) :)


Sembra più che l'autore l'abbia creato con INSERT INTO e alcuni hanno inserito un INSERT in una manutenzione. Succede molto, molto più di quanto "dovrebbe", purtroppo.
Andre Figueiredo

3

In SQL Server 2005, potresti avere qualcosa tra INSERT e INTO come questo:

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

Sebbene funzioni senza INTO, preferisco usare INTO per la leggibilità.


1

Entrambi fanno la stessa cosa. INTO è facoltativo (in T-SQL di SQL Server) ma aiuta la leggibilità.


0

Preferisco usarlo. Mantiene la stessa sensazione sintassi di delineazione e la leggibilità come in altre parti del linguaggio SQL, come group BY, order BY.


0

Ho iniziato a scrivere SQL su ORACLE, quindi quando vedo il codice senza INTO sembra solo "rotto" e confuso.

Sì, è solo la mia opinione e non sto dicendo che dovresti sempre usare INTO. Ma se non lo fai, dovresti essere consapevole del fatto che molte altre persone probabilmente penseranno la stessa cosa, specialmente se non hanno iniziato a creare script con implementazioni più recenti.

Con SQL penso sia anche molto importante rendersi conto che STAI aggiungendo una RIGA a una TABELLA e non stai lavorando con gli oggetti. Penso che sarebbe inutile per un nuovo sviluppatore pensare alle righe / voci della tabella SQL come oggetti. Di nuovo, solo una mia opinione.


0

Se disponibile, utilizzare la funzione standard. Non che tu abbia mai bisogno della portabilità per il tuo database particolare, ma è probabile che tu abbia bisogno della portabilità per la tua conoscenza SQL. Un particolare brutto esempio di T-SQL è l'uso di isnull, use coalesce!

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.