Грешка 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;
Въпреки че това не се счита за добра практика, тъй като може случайно да изберете грешни колони или да са в грешен ред и т.н.