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

Erro 109 do SQL Server:há mais colunas na instrução INSERT do que valores especificados na cláusula VALUES


Este é um erro comumente encontrado no SQL Server ao inserir dados em uma tabela. O erro completo é assim:
Msg 109, Level 15, State 1, Line 1
There are more columns in the INSERT statement than values specified in the VALUES clause. The number of values in the VALUES clause must match the number of columns specified in the INSERT statement.

Isso acontece quando você especifica mais colunas no INSERT instrução do que o número de valores que você está tentando inserir com VALUES cláusula.

Isso ocorrerá se você omitir acidentalmente um ou mais valores de VALUES cláusula.

Você obteria um erro semelhante (mas tecnicamente diferente) se tentasse fazer o oposto – especifique menos colunas no INSERT declaração do que você tenta inserir.

Exemplo


Aqui está um exemplo para demonstrar.
INSERT INTO Customers (FirstName, LastName) 
VALUES ('Bob');

Resultado:
Msg 109, Level 15, State 1, Line 1
There are more columns in the INSERT statement than values specified in the VALUES clause. The number of values in the VALUES clause must match the number of columns specified in the INSERT statement.

Nesse caso, especifico duas colunas (FirstName , LastName ), mas só especifico um valor para inserir (Bob ).

Como corrigir o erro


Posso corrigir isso removendo uma das colunas ou adicionando um segundo valor a ser inserido.

Então eu poderia fazer isso:
INSERT INTO Customers (FirstName) 
VALUES ('Bob');

Ou isto:
INSERT INTO Customers (FirstName, LastName) 
VALUES ('Bob', 'Brown');

Embora, usando esses exemplos, se o Sobrenome coluna tem um NOT NULL restrição, o primeiro exemplo violará essa restrição (porque eu estaria tentando inserir NULL no Sobrenome coluna quando na verdade há um NOT NULL restrição nessa coluna).