Fehlermeldung 213 ist ein häufiger Fehler, der auftritt, wenn Sie versuchen, Werte in eine Tabelle einzufügen, ohne die Spaltennamen explizit anzugeben.
Der Fehler sieht folgendermaßen aus:
Msg 213, Level 16, State 1, Line 1 Column name or number of supplied values does not match table definition.
Es tritt auf, wenn Sie die falsche Anzahl von Werten für diese Tabelle angeben. Mit anderen Worten, die Anzahl der von Ihnen bereitgestellten Werte stimmt nicht mit der Anzahl der Spalten in der Tabelle überein.
Beispiel
Hier ist ein Beispiel zur Veranschaulichung.
INSERT INTO Customers
VALUES ('Jake');
Ergebnis:
Msg 213, Level 16, State 1, Line 1 Column name or number of supplied values does not match table definition.
In meinem Fall besteht das Problem darin, dass die Tabelle tatsächlich drei Spalten enthält. Meine Tabellendefinition sieht so aus:
CREATE TABLE Customers (
CustomerId int IDENTITY(1,1) NOT NULL,
FirstName nvarchar(255),
LastName nvarchar(255)
);
Ich versuche, einen Wert einzufügen, aber SQL Server weiß nicht, in welche Spalte er eingefügt werden soll, daher der Fehler.
Ich würde auch den gleichen Fehler erhalten, wenn ich versuchte, zu viele Werte einzufügen. Folgendes erzeugt beispielsweise denselben Fehler.
INSERT INTO Customers
VALUES ('Jake', 'Smith', 'New York', 'USA');
Ergebnis:
Msg 213, Level 16, State 1, Line 1 Column name or number of supplied values does not match table definition.
So beheben Sie den Fehler
Eine Möglichkeit, dies zu beheben, besteht darin, sicherzustellen, dass die Anzahl der Werte, die Sie einzufügen versuchen, tatsächlich mit der Anzahl der Spalten in der Tabelle übereinstimmt.
Besser ist es, die Spaltennamen explizit in Ihrem INSERT
anzugeben Erklärung. Dadurch wird sichergestellt, dass Sie nicht versehentlich Daten in die falschen Spalten einfügen.
Je nachdem, welche Werte ich einfügen möchte, könnte ich mein Beispiel folgendermaßen umschreiben:
INSERT INTO Customers (FirstName)
VALUES ('Jake');
Oder dies:
INSERT INTO Customers (FirstName, LastName)
VALUES ('Jake', 'Smith');
Implizite Spaltennamen
Wie bereits erwähnt, ist es besser, jeden Spaltennamen in Ihrem INSERT
explizit zu buchstabieren -Anweisung (wie im vorherigen Beispiel).
Ich könnte mein Beispiel jedoch so ändern, dass implizite Spaltennamen verwendet werden:
INSERT INTO Customers
VALUES (1, 'Jake', 'Smith');
Dies könnte jetzt jedoch ein separates Problem in Bezug auf die Identitätsspalte verursachen. Siehe So fügen Sie einen expliziten Wert in eine Identitätsspalte ein, wenn Sie dies tun müssen.