Грешка 120 на SQL Server възниква, когато не посочите достатъчно колони във вашия INSERT списък, когато използвате SELECT списък със стойностите за вмъкване.
За да бъдем по-конкретни, това се случва, когато използвате SELECT списък във вашия INSERT оператор, но SELECT list не връща толкова колони, колкото сте посочили с INSERT .
Това е лесно за поправяне. Просто се уверете, че броят на колоните съвпада между вашия INSERT и SELECT списък.
Лош код
Ето пример за код, който причинява тази грешка.
INSERT INTO OrdersLatest (
OrderId,
OrderDate,
OrderDesc
)
SELECT
OrderId,
OrderDate
FROM OrdersMarch; Резултат:
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.
В този случай посочвам три колони в моя INSERT , но избирам само две колони в моя SELECT списък.
Добър код
Ето как да коригирате горната грешка.
INSERT INTO OrdersLatest (
OrderId,
OrderDate,
OrderDesc
)
SELECT
OrderId,
OrderDate,
OrderDesc
FROM OrdersMarch; Резултат:
(5 rows affected)
Всичко, което направих, беше да добавя OrderDesc колона към SELECT списък.
Указване на по-малко колони
Предишният пример очевидно предполага, че исках да вмъкна допълнителната колона. Ако не искаме тази колона да бъде вмъкната, трябваше да я премахнем от INSERT като цяло.
Като това.
INSERT INTO OrdersLatest (
OrderId,
OrderDate
)
SELECT
OrderId,
OrderDate
FROM OrdersMarch;
Това обаче ще зависи от това дали имаме или не NOT NULL ограничения върху таблицата на дестинацията.
Използване на заместващ знак в списъка SELECT
Възможно е също да използвате звездичката (* ) заместващ знак в SELECT списък.
INSERT INTO OrdersLatest (
OrderDate,
OrderId,
OrderDesc
)
SELECT *
FROM OrdersMarch; Въпреки че това не се счита за добра практика, тъй като може случайно да изберете грешни колони или да са в грешен ред и т.н.