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.