Esiste una differenza tra i modelli SQL INSERT

1

Gli inserimenti SQL sono solitamente documentati in questo modo:

INSERT TableName (Column1, Column2) VALUES ('Value1', 'Value2')

Tuttavia, in TSQL è anche possibile scrivere la (apparentemente) stessa affermazione in questo modo:

INSERT TableName (Column1, Column2) SELECT 'Value1', 'Value2'

Spiegare il piano sembra pensare che siano identici.

Sono loro? C'è qualche differenza nascosta o qualsiasi argomento per farlo il INSERT () Values () modo?

    
posta JC Ford 12.05.2015 - 03:28
fonte

2 risposte

4

La differenza non è nascosta - semplicemente i tuoi esempi non lo illustrano: -)

L'uso della sintassi INSERT TableName (Column1, Column2) VALUES ... limita le opzioni agli elenchi di valori (come nei tuoi esempi, nota che l'elenco valori dovrebbe essere racchiuso tra parentesi) o il valore di ritorno della stored procedure, ad es.

INSERT INTO Cities (Location) VALUES ( dbo.CreateNewPoint(x, y) );

L'uso della sintassi INSERT TableName (Column1, Column2) SELECT ... è molto più potente. Oltre ai casi precedenti puoi inserire quasi tutti i risultati dell'istruzione SELECT se solo corrispondono a tipi di colonne di destinazione.

In particolare è possibile inserire dati da altre tabelle, mescolare valori da più tabelle con valori costanti, ecc. Ad esempio:

INSERT INTO TargetTable (name, ColumnA, ColumnB, Sum) 
SELECT 'Programmers', T1.Value, T2.Value, SUM(T1.Value, T2.Value)
FROM SourceTable1 T1, SourceTable2 T2 WHERE T1.Value > 0 AND T2.Value > 0;

Tieni presente che INTO è una parola chiave facoltativa che può essere utilizzata tra INSERT e la tabella di destinazione.

Riferimento: link

    
risposta data 13.05.2015 - 22:53
fonte
0

In SQL ci sono molte volte in cui la sintassi diversa fa la stessa cosa

A un solo inserto statico quindi nessuna differenza

Chiaramente il limite dei valori è statico (hard coded) valori
Non puoi fare riferimento a una tabella

Un'istruzione select può essere usata per presentare il valore statico (hard coded) come hai mostrato. E puoi persino combinare hard code con colonne in una selezione.

Ciò che ti manca sono i valori in

INSERT TableName (Column1, Column2) 
VALUES ('Value1a', 'Value2a')
     , ('Value1b', 'Value2b')

Quanto sopra è più efficiente di più istruzioni di inserimento

Con selezionare la sintassi è

INSERT TableName (Column1, Column2) 
select 'Value1a', 'Value2a'
union 
select 'Value1b', 'Value2b'

In questo caso i valori sono più convenienti (secondo me)

    
risposta data 26.06.2015 - 18:52
fonte

Leggi altre domande sui tag