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.