Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Erro 213 do SQL Server:o nome da coluna ou o número de valores fornecidos não corresponde à definição da tabela.


A mensagem de erro 213 é um erro comum que ocorre quando você tenta inserir valores em uma tabela sem especificar explicitamente os nomes das colunas.

O erro se parece com isso:
Msg 213, Level 16, State 1, Line 1
Column name or number of supplied values does not match table definition.

Ocorre quando você especifica o número errado de valores para essa tabela. Em outras palavras, o número de valores que você fornece não corresponde ao número de colunas na tabela.

Exemplo


Aqui está um exemplo para demonstrar.
INSERT INTO Customers
VALUES ('Jake');

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

No meu caso, o problema é que a tabela realmente contém três colunas. Minha definição de tabela é assim:
CREATE TABLE Customers (
CustomerId int IDENTITY(1,1) NOT NULL,
FirstName nvarchar(255),
LastName nvarchar(255)
);

Estou tentando inserir um valor, mas o SQL Server não sabe em qual coluna ele deve entrar, daí o erro.

Eu também receberia o mesmo erro se tentasse inserir muitos valores. Por exemplo, o seguinte também produz o mesmo erro.
INSERT INTO Customers
VALUES ('Jake', 'Smith', 'New York', 'USA');

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

Como corrigir o erro


Uma maneira de corrigir isso é garantir que o número de valores que você tenta inserir realmente corresponda ao número de colunas na tabela.

Uma maneira melhor de fazer isso é especificar explicitamente os nomes das colunas em seu INSERT demonstração. Isso garantirá que você não insira dados acidentalmente nas colunas erradas.

Então, dependendo de quais valores eu quero inserir, eu poderia reescrever meu exemplo para isso:
INSERT INTO Customers (FirstName)
VALUES ('Jake');

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

Nomes de colunas implícitos


Como mencionado, é melhor soletrar explicitamente cada nome de coluna em seu INSERT declaração (como eu fiz no exemplo anterior).

Eu poderia, no entanto, alterar meu exemplo para usar nomes de colunas implícitos, assim:
INSERT INTO Customers
VALUES (1, 'Jake', 'Smith');

No entanto, isso agora pode causar um problema separado em relação à coluna de identidade. Consulte Como inserir um valor explícito em uma coluna de identidade se precisar fazer isso.