Jest to często spotykany błąd w programie SQL Server podczas wstawiania danych do tabeli. Pełny błąd wygląda tak:
Msg 109, Level 15, State 1, Line 1 There are more columns in the INSERT statement than values specified in the VALUES clause. The number of values in the VALUES clause must match the number of columns specified in the INSERT statement.
Dzieje się tak, gdy określisz więcej kolumn w INSERT
niż liczba wartości, które próbujesz wstawić za pomocą VALUES
klauzula.
Nastąpi to, jeśli przypadkowo pominiesz jedną lub więcej wartości z VALUES
klauzula.
Otrzymasz podobny (ale technicznie inny) błąd, jeśli spróbujesz zrobić coś przeciwnego – określ mniej kolumny w INSERT
oświadczenie niż próbujesz wstawić.
Przykład
Oto przykład do zademonstrowania.
INSERT INTO Customers (FirstName, LastName)
VALUES ('Bob');
Wynik:
Msg 109, Level 15, State 1, Line 1 There are more columns in the INSERT statement than values specified in the VALUES clause. The number of values in the VALUES clause must match the number of columns specified in the INSERT statement.
W tym przypadku określam dwie kolumny (FirstName
, LastName
), ale określam tylko jedną wartość do wstawienia (Bob
).
Jak naprawić błąd
Mogę to naprawić, usuwając jedną z kolumn lub dodając drugą wartość do wstawienia.
Więc mogłem to zrobić:
INSERT INTO Customers (FirstName)
VALUES ('Bob');
Albo to:
INSERT INTO Customers (FirstName, LastName)
VALUES ('Bob', 'Brown');
Chociaż, korzystając z tych przykładów, jeśli LastName kolumna ma NOT NULL
ograniczenie, pierwszy przykład naruszy to ograniczenie (ponieważ próbowałbym wstawić NULL
w nazwisko kolumna, gdy faktycznie występuje NOT NULL
ograniczenie w tej kolumnie).