sql >> Database >  >> RDS >> Sqlserver

SQL Server-fout 213:kolomnaam of aantal opgegeven waarden komt niet overeen met tabeldefinitie.

Foutbericht 213 is een veelvoorkomende fout die optreedt wanneer u waarden in een tabel probeert in te voegen zonder de kolomnamen expliciet op te geven.

De fout ziet er als volgt uit:

Msg 213, Level 16, State 1, Line 1
Column name or number of supplied values does not match table definition.

Het treedt op wanneer u het verkeerde aantal waarden voor die tabel opgeeft. Met andere woorden, het aantal waarden dat u opgeeft, komt niet overeen met het aantal kolommen in de tabel.

Voorbeeld

Hier is een voorbeeld om te demonstreren.

INSERT INTO Customers
VALUES ('Jake');

Resultaat:

Msg 213, Level 16, State 1, Line 1
Column name or number of supplied values does not match table definition.

In mijn geval is het probleem dat de tabel eigenlijk drie kolommen bevat. Mijn tabeldefinitie ziet er als volgt uit:

CREATE TABLE Customers (
CustomerId int IDENTITY(1,1) NOT NULL,
FirstName nvarchar(255),
LastName nvarchar(255)
);

Ik probeer een waarde in te voegen, maar SQL Server weet niet in welke kolom het moet komen, vandaar de fout.

Ik zou ook dezelfde foutmelding krijgen als ik probeerde te veel waarden in te voegen. Het volgende geeft bijvoorbeeld ook dezelfde fout.

INSERT INTO Customers
VALUES ('Jake', 'Smith', 'New York', 'USA');

Resultaat:

Msg 213, Level 16, State 1, Line 1
Column name or number of supplied values does not match table definition.

Hoe de fout op te lossen

Een manier om dit op te lossen, is ervoor te zorgen dat het aantal waarden dat u probeert in te voegen, daadwerkelijk overeenkomt met het aantal kolommen in de tabel.

Een betere manier om dit te doen, is door de kolomnamen expliciet op te geven in uw INSERT uitspraak. Als u dit doet, zorgt u ervoor dat u niet per ongeluk gegevens in de verkeerde kolommen invoegt.

Dus afhankelijk van welke waarden ik wil invoegen, zou ik mijn voorbeeld hier naar kunnen herschrijven:

INSERT INTO Customers (FirstName)
VALUES ('Jake');

Of dit:

INSERT INTO Customers (FirstName, LastName)
VALUES ('Jake', 'Smith');

Impliciete kolomnamen

Zoals vermeld, is het beter om elke kolomnaam expliciet te spellen in uw INSERT statement (zoals ik deed in het vorige voorbeeld).

Ik zou echter mijn voorbeeld kunnen wijzigen om impliciete kolomnamen te gebruiken, zoals deze:

INSERT INTO Customers
VALUES (1, 'Jake', 'Smith');

Dit kan nu echter een apart probleem veroorzaken met betrekking tot de identiteitskolom. Zie Een expliciete waarde invoegen in een identiteitskolom als dat nodig is.


  1. Heterogene databasereplicatie configureren – SQL Server naar Oracle

  2. Verschil tussen TRIM() en TRIM_ORACLE() in MariaDB

  3. Hoe Oracle Clob bij te werken met behulp van JDBC

  4. Hoe een gebruiker aan te maken in Oracle en privileges toe te wijzen