Błąd SQL Server 120 występuje, gdy nie określisz wystarczającej liczby kolumn w INSERT
lista przy użyciu SELECT
listę wartości do wstawienia.
Mówiąc dokładniej, dzieje się tak, gdy używasz SELECT
lista w INSERT
oświadczenie, ale SELECT
lista nie zwraca tylu kolumn, ile określasz za pomocą INSERT
.
Łatwo to naprawić. Po prostu upewnij się, że liczba kolumn między INSERT
jest taka sama. i SELECT
lista.
Zły kod
Oto przykład kodu, który powoduje ten błąd.
INSERT INTO OrdersLatest (
OrderId,
OrderDate,
OrderDesc
)
SELECT
OrderId,
OrderDate
FROM OrdersMarch;
Wynik:
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.
W tym przypadku określam trzy kolumny w moim INSERT
, ale wybieram tylko dwie kolumny w moim SELECT
lista.
Dobry kod
Oto jak naprawić powyższy błąd.
INSERT INTO OrdersLatest (
OrderId,
OrderDate,
OrderDesc
)
SELECT
OrderId,
OrderDate,
OrderDesc
FROM OrdersMarch;
Wynik:
(5 rows affected)
Wszystko, co zrobiłem, to dodanie OrderDesc
kolumnę do SELECT
lista.
Określanie mniejszej liczby kolumn
Poprzedni przykład oczywiście zakłada, że chciałem wstawić dodatkową kolumnę. Jeśli nie chcieliśmy, aby ta kolumna była wstawiana, powinniśmy ją usunąć z INSERT
razem.
W ten sposób.
INSERT INTO OrdersLatest (
OrderId,
OrderDate
)
SELECT
OrderId,
OrderDate
FROM OrdersMarch;
Jednak zależałoby to od tego, czy mamy jakikolwiek NOT NULL
ograniczenia w tabeli docelowej.
Korzystanie z symboli wieloznacznych na liście SELECT
Możliwe jest również użycie gwiazdki (*
) symbol wieloznaczny w SELECT
lista.
INSERT INTO OrdersLatest (
OrderDate,
OrderId,
OrderDesc
)
SELECT *
FROM OrdersMarch;
Chociaż nie jest to uważane za dobrą praktykę, ponieważ możesz przypadkowo wybrać niewłaściwe kolumny, mogą one być w złej kolejności itp.