web-dev-qa-db-fra.com

Le texte a été tronqué ou un ou plusieurs caractères ne correspondaient pas dans la page de code cible, y compris la clé primaire dans une autre

J'essaie d'importer un fichier à plat dans une base de données de serveur SQL cible Oledb.

voici le domaine qui me pose problème:

enter image description here

voici les propriétés de cette connexion de fichier à plat, en particulier le champ:

enter image description here

voici le message d'erreur:

[Source - 18942979103_txt [424]] Erreur: la conversion des données a échoué. Le la conversion des données pour la colonne "nom-destinataire" a renvoyé la valeur d'état 4 et le texte d'état "Le texte a été tronqué ou un ou plusieurs caractères ne correspondaient pas à la page de codes cible.".

Qu'est-ce que je fais mal?

Je sais que c'est une vieille question. La façon dont je l'ai résolu - après avoir échoué en augmentant la longueur ou même en changeant le texte de type de données - créait un fichier xlsx et importait. Il a détecté avec précision le type de données au lieu de définir varchar (50) dans toutes les colonnes. Il s'avère que nvharchar (255) pour cette colonne l'aurait également fait.

18
Chookoos

Voici ce qui a résolu le problème pour moi. Je n'ai pas eu à convertir en Excel. Il suffit de modifier le DataType lors du choix de la source de données sur "flux de texte" (Figure 1). Vous pouvez également consulter la boîte de dialogue "Modifier les correspondances" pour vérifier si la taille a été modifiée (Figure 2).

Figure 1

 enter image description here

Figure 2

 enter image description here

21
ADH

J'ai résolu ce problème en ORDONNANT mes données source (xls, csv, peu importe) de sorte que les valeurs de texte les plus longues figurent en haut du fichier. Excel est génial. utilisez la fonction LEN () sur votre colonne difficile. Commandez par cette valeur de longueur avec la valeur la plus longue en plus de votre jeu de données. Sauvegarder. Essayez à nouveau l'importation. 

13
Eric Hrnicek

SQL Server peut peut-être vous suggérer le bon type de données (même s'il ne choisit pas le bon type par défaut) - cliquer sur le bouton "Suggérer les types" (affiché dans la capture d'écran ci-dessus) vous permet de faire analyser le source par SQL Server et suggérer un type de données pour le champ qui génère une erreur. Dans mon cas, le choix d'analyser 20000 lignes pour générer les suggestions et d'utiliser le type de données suggéré résultant a résolu le problème.

6
user756366

L'importation de données SQl Management Studio examine les premières lignes pour déterminer les spécifications de données source.

déplacez vos enregistrements pour que le texte le plus long soit en haut.

2
Pinch

J'ai eu un problème similaire contre 2 bases de données différentes (DB2 et SQL), enfin je l'ai résolu en utilisant CAST dans la requête source de DB2. Je profite également de l'utilisation d'une requête en adaptant la colonne source à varchar et en évitant les espaces vides inutiles: 

CAST(RTRIM(LTRIM(COLUMN_NAME)) AS VARCHAR(60) CCSID UNICODE 
   FOR SBCS DATA)  COLUMN_NAME

La question importante ici est la conversion CCSID.

1
JossWs

Aucun de ce qui précède n'a fonctionné pour moi. J'ai résolu mon problème en enregistrant mes données source (enregistrer sous) sous un fichier Excel unique xls Worksheet Excel 5.0/95 et importé sans en-tête de colonne. De plus, j'ai créé la table à l'avance et mappé manuellement au lieu de laisser SQL créer la table.

0
TonyE

Alors qu'une approche proposée ci-dessus (@chookoos, ici dans ce rapport convertir en classeur Excel) et que l'importation résout ce type de problèmes, cette solution cette solution dans un autre document est excellente restez avec votre fichier csv ou tsv ou txt, et effectuez les réglages nécessaires sans créer de solution pour le produit Microsoft enter image description here enter image description here

0
Albert