Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Erreur SQL Server 109 :il y a plus de colonnes dans l'instruction INSERT que de valeurs spécifiées dans la clause VALUES

Il s'agit d'une erreur couramment rencontrée dans SQL Server lors de l'insertion de données dans une table. L'erreur complète ressemble à ceci :

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.

Cela se produit lorsque vous spécifiez plus de colonnes dans le INSERT instruction que le nombre de valeurs que vous essayez d'insérer avec le VALUES clause.

Cela se produira si vous omettez accidentellement une ou plusieurs valeurs de VALUES clause.

Vous obtiendrez une erreur similaire (mais techniquement différente) si vous essayez de faire le contraire - spécifiez moins colonnes dans INSERT déclaration que vous essayez d'insérer.

Exemple

Voici un exemple pour illustrer.

INSERT INTO Customers (FirstName, LastName) 
VALUES ('Bob');

Résultat :

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.

Dans ce cas, je spécifie deux colonnes (FirstName , LastName ), mais je ne spécifie qu'une seule valeur à insérer (Bob ).

Comment corriger l'erreur

Je peux résoudre ce problème en supprimant l'une des colonnes ou en ajoutant une deuxième valeur à insérer.

Donc je pourrais faire ceci :

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

Ou ceci :

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

Bien que, en utilisant ces exemples, si le LastName la colonne a un NOT NULL contrainte, le premier exemple violera cette contrainte (parce que j'essaierais d'insérer NULL dans le LastName colonne lorsqu'il y a en fait un NOT NULL contrainte sur cette colonne).