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

Comment réparer "La liste de sélection de l'instruction INSERT contient moins d'éléments que la liste d'insertion"

L'erreur SQL Server 120 se produit lorsque vous ne spécifiez pas suffisamment de colonnes dans votre INSERT liste lors de l'utilisation d'un SELECT liste des valeurs à insérer.

Pour être plus précis, cela se produit lorsque vous utilisez un SELECT liste dans votre INSERT déclaration, mais le SELECT list ne renvoie pas autant de colonnes que vous spécifiez avec le INSERT .

C'est facile à réparer. Assurez-vous simplement que le nombre de colonnes correspond à votre INSERT et SELECT liste.

Mauvais code

Voici un exemple de code qui provoque cette erreur.

INSERT INTO OrdersLatest (
    OrderId, 
    OrderDate, 
    OrderDesc
    )
SELECT 
    OrderId,
    OrderDate
FROM OrdersMarch;

Résultat :

Msg 120, Level 15, State 1, Line 1
The select list for the INSERT statement contains fewer items than the insert list. The number of SELECT values must match the number of INSERT columns.

Dans ce cas, je spécifie trois colonnes dans mon INSERT , mais je ne sélectionne que deux colonnes dans mon SELECT liste.

Bon code

Voici comment corriger l'erreur ci-dessus.

INSERT INTO OrdersLatest (
    OrderId, 
    OrderDate, 
    OrderDesc
    )
SELECT 
    OrderId,
    OrderDate, 
    OrderDesc
FROM OrdersMarch;

Résultat :

(5 rows affected)

Tout ce que j'ai fait a été d'ajouter le OrderDesc colonne au SELECT liste.

Spécifier moins de colonnes

L'exemple précédent suppose évidemment que je voulais insérer la colonne supplémentaire. Si nous ne voulions pas que cette colonne soit insérée, nous aurions dû la supprimer du INSERT tout à fait.

Comme ça.

INSERT INTO OrdersLatest (
    OrderId, 
    OrderDate
    )
SELECT 
    OrderId,
    OrderDate
FROM OrdersMarch;

Cependant, cela dépendra si nous avons ou non un NOT NULL contraintes sur la table de destination.

Utiliser un caractère générique dans la liste SELECT

Il est également possible d'utiliser l'astérisque (* ) joker dans le SELECT liste.

INSERT INTO OrdersLatest (
    OrderDate, 
    OrderId, 
    OrderDesc
    )
SELECT *
FROM OrdersMarch;

Bien que cela ne soit pas considéré comme une bonne pratique, vous pourriez accidentellement sélectionner les mauvaises colonnes, ou elles pourraient être dans le mauvais ordre, etc.