Съобщение за грешка 213 е често срещана грешка, която се случва, когато се опитате да вмъкнете стойности в таблица, без изрично да посочите имената на колоните.
Грешката изглежда така:
Msg 213, Level 16, State 1, Line 1 Column name or number of supplied values does not match table definition.
Това се случва, когато посочите грешен брой стойности за тази таблица. С други думи, броят на предоставените от вас стойности не съвпада с броя на колоните в таблицата.
Пример
Ето пример за демонстрация.
INSERT INTO Customers
VALUES ('Jake');
Резултат:
Msg 213, Level 16, State 1, Line 1 Column name or number of supplied values does not match table definition.
В моя случай проблемът е, че таблицата всъщност съдържа три колони. Моята дефиниция на таблицата изглежда така:
CREATE TABLE Customers (
CustomerId int IDENTITY(1,1) NOT NULL,
FirstName nvarchar(255),
LastName nvarchar(255)
);
Опитвам се да вмъкна стойност, но SQL Server не знае в коя колона трябва да влезе, оттук и грешката.
Също така бих получил същата грешка, ако се опитах да вмъкна твърде много стойности. Например следното също произвежда същата грешка.
INSERT INTO Customers
VALUES ('Jake', 'Smith', 'New York', 'USA');
Резултат:
Msg 213, Level 16, State 1, Line 1 Column name or number of supplied values does not match table definition.
Как да поправя грешката
Един от начините да поправите това е да се уверите, че броят на стойностите, които се опитвате да вмъкнете, действително съвпада с броя на колоните в таблицата.
По-добър начин да го направите е изрично да посочите имената на колоните във вашия INSERT
изявление. Това ще гарантира, че няма случайно да вмъкнете данни в грешни колони.
Така че в зависимост от това кои стойности искам да вмъкна, мога да пренапиша моя пример на това:
INSERT INTO Customers (FirstName)
VALUES ('Jake');
Или това:
INSERT INTO Customers (FirstName, LastName)
VALUES ('Jake', 'Smith');
Неявни имена на колони
Както споменахме, по-добре е изрично да посочите името на всяка колона във вашия INSERT
изявление (както направих в предишния пример).
Мога обаче да променя примера си, за да използвам неявни имена на колони, като това:
INSERT INTO Customers
VALUES (1, 'Jake', 'Smith');
Това обаче може да доведе до отделен проблем по отношение на колоната за самоличност. Вижте как да вмъкнете изрична стойност в колона за самоличност, ако трябва да направите това.