Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Błąd serwera SQL 213:Nazwa kolumny lub liczba podanych wartości nie jest zgodna z definicją tabeli.

Komunikat o błędzie 213 to typowy błąd, który występuje podczas próby wstawienia wartości do tabeli bez jawnego określania nazw kolumn.

Błąd wygląda tak:

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

Występuje, gdy określisz niewłaściwą liczbę wartości dla tej tabeli. Innymi słowy, liczba podanych wartości nie odpowiada liczbie kolumn w tabeli.

Przykład

Oto przykład do zademonstrowania.

INSERT INTO Customers
VALUES ('Jake');

Wynik:

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

W moim przypadku problem polega na tym, że tabela faktycznie zawiera trzy kolumny. Definicja mojej tabeli wygląda tak:

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

Próbuję wstawić wartość, ale SQL Server nie wie, do której kolumny powinien przejść, stąd błąd.

Otrzymałbym również ten sam błąd, gdybym próbował wstawić zbyt wiele wartości. Na przykład następujący błąd również powoduje ten sam błąd.

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

Wynik:

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

Jak naprawić błąd

Jednym ze sposobów rozwiązania tego problemu jest upewnienie się, że liczba wartości, które próbujesz wstawić, faktycznie odpowiada liczbie kolumn w tabeli.

Lepszym sposobem na to jest jawne określenie nazw kolumn w INSERT oświadczenie. Dzięki temu upewnisz się, że przypadkowo nie wstawisz danych do niewłaściwych kolumn.

Więc w zależności od wartości, które chcę wstawić, mogę przepisać mój przykład do tego:

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

Albo to:

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

Niejawne nazwy kolumn

Jak wspomniano, lepiej jest wyraźnie przeliterować nazwę każdej kolumny w INSERT oświadczenie (tak jak w poprzednim przykładzie).

Mógłbym jednak zmienić mój przykład, aby używał niejawnych nazw kolumn, na przykład:

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

Jednak może to teraz spowodować osobny problem dotyczący kolumny tożsamości. Zobacz, jak wstawić jawną wartość do kolumny tożsamości, jeśli musisz to zrobić.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Czy możliwe jest wykonanie wielu aktualizacji za pomocą jednej instrukcji UPDATE SQL?

  2. Generatory danych dla serwera SQL?

  3. Bazy danych systemu SQL Server — podstawowe pojęcia

  4. Porównanie typów danych daty i godziny w SQL Server

  5. jak skonfigurować plik konfiguracyjny hibernacji dla serwera sql?