sql >> Database teknologi >  >> RDS >> Sqlserver

SQL Server-fejl 213:Kolonnenavnet eller antallet af angivne værdier matcher ikke tabeldefinitionen.

Fejlmeddelelse 213 er en almindelig fejl, der opstår, når du forsøger at indsætte værdier i en tabel uden eksplicit at angive kolonnenavnene.

Fejlen ser sådan ud:

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

Det opstår, når du angiver det forkerte antal værdier for den tabel. Med andre ord svarer antallet af værdier, du angiver, ikke til antallet af kolonner i tabellen.

Eksempel

Her er et eksempel til at demonstrere.

INSERT INTO Customers
VALUES ('Jake');

Resultat:

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

I mit tilfælde er problemet, at tabellen faktisk indeholder tre kolonner. Min tabeldefinition ser sådan ud:

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

Jeg forsøger at indsætte en værdi, men SQL Server ved ikke, hvilken kolonne den skal gå ind i, derfor fejlen.

Jeg ville også få den samme fejl, hvis jeg forsøgte at indsætte for mange værdier. For eksempel giver det følgende også den samme fejl.

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

Resultat:

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

Sådan rettes fejlen

En måde at løse dette på er at sikre, at antallet af værdier, du forsøger at indsætte, faktisk matcher antallet af kolonner i tabellen.

En bedre måde at gøre det på er eksplicit at angive kolonnenavnene i din INSERT udmelding. Ved at gøre dette sikrer du, at du ikke ved et uheld indsætter data i de forkerte kolonner.

Så afhængigt af hvilke værdier jeg vil indsætte, kunne jeg omskrive mit eksempel til dette:

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

Eller denne:

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

Implicitte kolonnenavne

Som nævnt er det bedre eksplicit at stave hvert kolonnenavn i din INSERT sætning (som jeg gjorde i det foregående eksempel).

Jeg kunne dog ændre mit eksempel til at bruge implicitte kolonnenavne, som dette:

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

Dette kan dog nu forårsage et særskilt problem vedrørende identitetskolonnen. Se, hvordan du indsætter en eksplicit værdi i en identitetskolonne, hvis du skal gøre dette.


  1. Kan ikke installere pg gem i Mavericks med Postgres.app

  2. PostgreSQL Omvendt LIKE

  3. problemer med python manage.py migrate -> Intet modul ved navn psycopg2

  4. Oracle Kombiner flere kolonner til én