sql >> Databáze >  >> RDS >> Sqlserver

SQL Server Chyba 213:Název sloupce nebo počet zadaných hodnot neodpovídá definici tabulky.

Chybová zpráva 213 je běžná chyba, ke které dochází při pokusu o vložení hodnot do tabulky bez explicitního zadání názvů sloupců.

Chyba vypadá takto:

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

Nastane, když zadáte nesprávný počet hodnot pro danou tabulku. Jinými slovy, počet zadaných hodnot neodpovídá počtu sloupců v tabulce.

Příklad

Zde je příklad k demonstraci.

INSERT INTO Customers
VALUES ('Jake');

Výsledek:

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

V mém případě je problém v tom, že tabulka ve skutečnosti obsahuje tři sloupce. Moje definice tabulky vypadá takto:

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

Snažím se vložit hodnotu, ale SQL Server neví, do kterého sloupce má jít, proto došlo k chybě.

Také bych dostal stejnou chybu, kdybych se pokusil vložit příliš mnoho hodnot. Například následující také vytváří stejnou chybu.

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

Výsledek:

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

Jak opravit chybu

Jedním ze způsobů, jak to vyřešit, je zajistit, aby počet hodnot, které se pokoušíte vložit, skutečně odpovídal počtu sloupců v tabulce.

Lepší způsob, jak to udělat, je explicitně zadat názvy sloupců v INSERT prohlášení. Tím zajistíte, že náhodně nevložíte data do nesprávných sloupců.

Takže podle toho, které hodnoty chci vložit, bych mohl přepsat svůj příklad na toto:

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

Nebo toto:

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

Implicitní názvy sloupců

Jak již bylo zmíněno, je lepší v INSERT explicitně uvést název každého sloupce prohlášení (jako jsem to udělal v předchozím příkladu).

Mohl bych však změnit svůj příklad tak, aby používal implicitní názvy sloupců, jako je tento:

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

To by však nyní mohlo způsobit samostatný problém týkající se sloupce identity. Pokud to potřebujete, viz Jak vložit explicitní hodnotu do sloupce identity.


  1. SQLite s

  2. SQL Server RAISERROR prohlášení s jednoduchými příklady

  3. Vytvořte datum z roku a čísla týdne v MSSQL

  4. Funkce CHR() v Oracle