Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Come risolvere "L'elenco di selezione per l'istruzione INSERT contiene meno elementi rispetto all'elenco di inserimento"

L'errore 120 di SQL Server si verifica quando non specifichi un numero sufficiente di colonne nel tuo INSERT elenco quando si utilizza un SELECT elenco per i valori da inserire.

Per essere più specifici, succede quando usi un SELECT elenco nel tuo INSERT istruzione, ma il SELECT list non restituisce tutte le colonne che stai specificando con INSERT .

Questo è facile da aggiustare. Assicurati semplicemente che il numero di colonne corrisponda al tuo INSERT e SELECT elenco.

Codice errato

Ecco un esempio di codice che causa questo errore.

INSERT INTO OrdersLatest (
    OrderId, 
    OrderDate, 
    OrderDesc
    )
SELECT 
    OrderId,
    OrderDate
FROM OrdersMarch;

Risultato:

Msg 120, Level 15, State 1, Line 1
The select list for the INSERT statement contains fewer items than the insert list. The number of SELECT values must match the number of INSERT columns.

In questo caso, specifico tre colonne nel mio INSERT , ma seleziono solo due colonne nel mio SELECT elenco.

Buon codice

Ecco come correggere l'errore precedente.

INSERT INTO OrdersLatest (
    OrderId, 
    OrderDate, 
    OrderDesc
    )
SELECT 
    OrderId,
    OrderDate, 
    OrderDesc
FROM OrdersMarch;

Risultato:

(5 rows affected)

Tutto quello che ho fatto è stato aggiungere OrderDesc nella colonna SELECT elenco.

Specificare meno colonne

L'esempio precedente presuppone ovviamente che io volessi inserire la colonna extra. Se non volevamo che quella colonna fosse inserita, avremmo dovuto rimuoverla da INSERT del tutto.

Così.

INSERT INTO OrdersLatest (
    OrderId, 
    OrderDate
    )
SELECT 
    OrderId,
    OrderDate
FROM OrdersMarch;

Tuttavia, ciò dipende dal fatto che abbiamo o meno un NOT NULL vincoli sulla tabella di destinazione.

Utilizzo di un carattere jolly nell'elenco SELECT

È anche possibile utilizzare l'asterisco (* ) carattere jolly nel SELECT elenco.

INSERT INTO OrdersLatest (
    OrderDate, 
    OrderId, 
    OrderDesc
    )
SELECT *
FROM OrdersMarch;

Anche se questa non è considerata una buona pratica, poiché potresti selezionare accidentalmente le colonne sbagliate, o potrebbero essere nell'ordine sbagliato, ecc.