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.