Nom de la colonne ou le nombre de valeurs fournies ne correspondent pas à la définition de la table
Dans SQL server, j'essaie d'insérer des valeurs d'un tableau à l'autre à l'aide de la requête ci-dessous:
delete from tblTable1
insert into tblTable1 select * from tblTable1_Link
J'obtiens l'erreur suivante:
Nom de la colonne ou le nombre de valeurs fournies ne correspondent pas à la définition de la table.
Je suis sûr que les deux tableaux ont la même structure, les mêmes noms de colonnes et les mêmes types de données.
S'il vous plaît aider!
- Une possibilité est que la DB classement sur votre TEMP DB et la base de données que vous insérez dans ne correspondent pas.
- N'est-ce pas très flaggable de ne pas poster les schémas des tables? "Je suis sûr" n'est pas suffisant: nous avons tous été dans nombre de situations où nous ne pouvons pas voir la forêt pour les arbres de savoir que notre propre certitude peut être terriblement incorrect, et il faut poster un bon volume de l'information sur le problème pour quelqu'un d'autre à signaler la chose la plus évidente qui nous manque.
Vous devez vous connecter pour publier un commentaire.
Ils n'ont pas la même structure... je peux vous garantir qu'ils sont différents
Je sais que vous avez déjà créé... Il y a déjà un objet nommé "tbltable1" dans la base de données
Ce que vous souhaitez peut-être est-ce (qui résout également à votre autre question):
pour les plaquettes, il est toujours préférable de spécifier les noms de colonne de voir la suite
fonctionne très bien, la modification de la table de def pour les causes de l'erreur
Mais le changement de la ci-dessus pour
œuvres. Vous devez être plus précis avec les colonnes spécifiées
d'approvisionnement les structures, et nous pouvons avoir un regard
C'est un vieux post, mais je veux aussi mentionner que si vous avez quelque chose comme
et bla et blah2 sont identiques à garder à l'esprit qu'une colonne calculée va lancer ce même message d'erreur...
Je viens de réaliser que lorsque le ci-dessus a échoué et j'ai essayé
Dans mon exemple, il a champ nom complet (calculée à partir de la première et de la dernière, etc)
Le problème, c'est que vous essayez d'insérer des données dans la base de données sans l'aide de colonnes. Sql server vous donne ce message d'erreur.
erreur:
insert into users values('1', '2','3')
- cela fonctionne très bien tant que vous n'avez que 3 colonnessi vous avez 4 colonnes, mais seulement à insérer dans 3 d'entre eux
correct:
insert into users (firstName,lastName,city) values ('Tom', 'Jones', 'Miami')
espère que cette aide
La suppression de la table n'était pas une option pour moi, depuis que je suis tenue d'un journal en cours d'exécution. Si à chaque fois que j'ai besoin d'insérer, j'ai dû abandonner, le tableau serait vide de sens.
Mon erreur était parce que j'avais un couple de colonnes dans l'instruction create table qui ont été produits des autres colonnes, la modification de ces corrigé mon problème. par exemple
Les colonnes calculées rendre le problème.
Ne pas utiliser
SELECT *
. Vous devez spécifier chaque champs après les SÉLECTIONNER à l'exception des champs calculésJ'espère que vous avez trouvé une bonne solution.
J'ai eu le même problème, et j'ai travaillé autour d'elle n'est probablement pas le meilleur, mais il est aujourd'hui.
il s'agit de créer un serveur lié et à l'aide de sql dynamique - pas le meilleur, mais si tout le monde peut proposer quelque chose de mieux, s'il vous plaît commentaire/réponse.
cela fonctionne pour moi maintenant.
Je peux vous garantir que le nombre de colonnes et le type des colonnes retournées par la procédure stockée sont les mêmes que dans ce tableau, tout simplement parce que je retourne la même table de la procédure stockée.
merci et salutations
marcelo
Pour moi, le coupable est int valeur attribuée à salaire
Insert into Employés(ID,Prenom,Nom,Sexe,Salaire) values(3,'Canada', 'pa', 'm',15,000)
dans la colonne de salaire Lorsque nous attribuons à 15 000 le compilateur comprendre de 15 000 et.
Cette correction fonctionne très bien pour moi.
Insert into Employés(ID,Prenom,Nom,Sexe,Salaire) values(4,'NOUS', 'sam', 'm',15000)
Mise à jour vers SQL server 2016/2017/...
Nous avons des procédures stockées en place d'importer et d'exporter des bases de données.
Dans la sp, nous utilisons (entre autres choses) de RESTAURATION FILELISTONLY à PARTIR d'un DISQUE dans lequel nous créons un
tableau "#restoretemp" pour le restaurer à partir du fichier.
Avec SQL server 2016, MS a ajouté un champ SnapshotURL de type nvarchar(360) (restauration url Azur) ce qui a provoqué le message d'erreur.
Après, j'ai amélioré sur le terrain, la restauration a fonctionné de nouveau.
Code ciselée (voir le dernier champ):
Méfiez-vous des déclencheurs. Peut-être que le problème est avec une certaine opération sur le déclencheur pour des lignes insérées.
Vérifier votre
id
. Est-il une Identité? Si elle est alors assurez-vous qu'il est déclaré commeID not null Identity(1,1)
Et avant la création de votre table ,
Drop table
et puiscreate table
.