web-dev-qa-db-fra.com

Le nom de colonne ou le nombre de valeurs fournies ne correspond pas à l'erreur de définition de table

J'ai une table, avec deux clés étrangères définies sur deux colonnes de cette table. Le problème est que, lorsque j'insère les valeurs de SQL Server, j'obtiens l'erreur suivante:

Le nom de la colonne ou le nombre de valeurs fournies ne correspond pas à la définition de la table

Veuillez voir l'image ci-dessous pour la définition du tableau. Pouvez-vous me dire pourquoi la valeur n'est pas insérée?

Table Image

5
codeOholic

Vous ne nous montrez pas ce que vous faites - mais basé sur la structure de la table, c'est ce que vous devriez faire:

  • créer une instruction INSERT qui explicitement répertorie les colonnes dans lesquelles elle sera insérée - en supposant que ID pourrait être un IDENTITY colonne dans laquelle vous ne voulez pas/ne pouvez pas insérer

  • définir le nombre exact de valeurs à remplir dans ces colonnes

Donc, votre instruction INSERT devrait ressembler à ceci:

INSERT INTO dbo.tbl_Post (cat_id, ngo_id, title, description, active)
VALUES (42, 4711, 'Some title', 'Some description', 1)

Ce que vous devez absolument avoir dans les habitudes d'éviter , c'est d'utiliser INSERT INTO dbo.tblPost sans définissant explicitement la liste des colonnes à insérer. Ceci est juste une recette pour un désastre, dès que vous modifiez votre définition de table, tous vos INSERTs existants se briseront car ils ne correspondent plus à la définition de la table.

Par conséquent: toujours définissez explicitement la liste des colonnes dans lesquelles une instruction INSERT doit remplir les données!

Voir également l'excellent article de blog d'Aaron Bertrand sur le sujet:
Mauvaises habitudes à donner: utiliser SELECT */omettre la liste des colonnes

9
marc_s