Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Грешка на SQL Server 213:Името на колоната или броят на предоставените стойности не съответстват на дефиницията на таблицата.

Съобщение за грешка 213 е често срещана грешка, която се случва, когато се опитате да вмъкнете стойности в таблица, без изрично да посочите имената на колоните.

Грешката изглежда така:

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

Това се случва, когато посочите грешен брой стойности за тази таблица. С други думи, броят на предоставените от вас стойности не съвпада с броя на колоните в таблицата.

Пример

Ето пример за демонстрация.

INSERT INTO Customers
VALUES ('Jake');

Резултат:

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

В моя случай проблемът е, че таблицата всъщност съдържа три колони. Моята дефиниция на таблицата изглежда така:

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

Опитвам се да вмъкна стойност, но SQL Server не знае в коя колона трябва да влезе, оттук и грешката.

Също така бих получил същата грешка, ако се опитах да вмъкна твърде много стойности. Например следното също произвежда същата грешка.

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

Резултат:

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

Как да поправя грешката

Един от начините да поправите това е да се уверите, че броят на стойностите, които се опитвате да вмъкнете, действително съвпада с броя на колоните в таблицата.

По-добър начин да го направите е изрично да посочите имената на колоните във вашия INSERT изявление. Това ще гарантира, че няма случайно да вмъкнете данни в грешни колони.

Така че в зависимост от това кои стойности искам да вмъкна, мога да пренапиша моя пример на това:

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

Или това:

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

Неявни имена на колони

Както споменахме, по-добре е изрично да посочите името на всяка колона във вашия INSERT изявление (както направих в предишния пример).

Мога обаче да променя примера си, за да използвам неявни имена на колони, като това:

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

Това обаче може да доведе до отделен проблем по отношение на колоната за самоличност. Вижте как да вмъкнете изрична стойност в колона за самоличност, ако трябва да направите това.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL Server Collection Inventory Script -2

  2. Инструмент за скриптиране на данни от таблица

  3. Завъртане с помощта на SQL Server 2000

  4. Как да свържете текст от множество редове в един текстов низ в SQL Server

  5. Архитектура на SQL Server AlwaysOn (група за наличност) и инсталация стъпка по стъпка -2