Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

SQL Server-Fehler 213:Spaltenname oder Anzahl der angegebenen Werte stimmt nicht mit der Tabellendefinition überein.

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.