86 votes

Erreurs dans SQL Server lors de l'importation d'un fichier CSV malgré l'utilisation de varchar(MAX) pour chaque colonne

J'essaie d'insérer un gros fichier CSV (plusieurs gigaoctets) dans la base de données de l'entreprise. SQL Server mais une fois que j'ai passé en revue les Import Wizard et enfin essayer d'importer le fichier, je reçois le rapport d'erreur suivant :

  • Exécution (Erreur) Messages

Erreur 0xc02020a1 : Tâche de flux de données 1 : La conversion des données a échoué. La conversion de données pour la colonne ""Title"" a renvoyé la valeur d'état 4 et l'état texte "Le texte a été tronqué ou un ou plusieurs caractères n'ont pas de correspondance dans la page de code cible ".

( SQL Server Import and Export Wizard )

Erreur 0xc020902a : Data Flow Task 1 : La "Source - Train_csv.Outputs[Flat File Source Output].Columns["Title"]" a échoué car une troncature s'est produite, et la disposition de la ligne de troncature sur "Source - Train_csv.Outputs[Flat File Source Output].Columns["Title"]" spécifie un échec sur la troncature. Une erreur de troncature s'est produite sur l'objet l'objet spécifié du composant spécifié.

( SQL Server Import and Export Wizard )

Erreur 0xc0202092 : Data Flow Task 1 : Une erreur s'est produite lors du traitement du fichier " C:\Train.csv "sur la ligne de données 2.

( SQL Server Import and Export Wizard )

Erreur 0xc0047038 : Tâche de flux de données 1 : Code d'erreur SSIS DTS_E_PRIMEOUTPUTFAILED. La méthode PrimeOutput sur la Source - Train_csv a renvoyé le code d'erreur 0xC0202092. Le composant a renvoyé un code d'erreur lorsque le moteur de pipeline a appelé PrimeOutput(). La signification du code d'échec est définie par le composant, mais l'erreur est fatale et le pipeline a cessé de s'exécuter. Il peut y avoir des messages d'erreur affichés avant cela, avec plus d'informations sur l'échec.

( SQL Server Import and Export Wizard )

J'ai d'abord créé la table dans laquelle j'insère le fichier, et j'ai défini chaque colonne pour qu'elle contienne varchar(MAX). Je ne comprends donc pas comment je peux encore avoir ce problème de troncature. Que dois-je faire de mal ?

201voto

Hart CO Points 28203

Dans l'Assistant d'Importation et d'Exportation de SQL Server, vous pouvez ajuster les types de données source dans le champ Advanced (ils deviennent les types de données de la sortie si l'on crée une nouvelle table, mais sinon ils sont juste utilisés pour manipuler les données sources).

Les types de données sont fâcheusement différents de ceux de MS SQL, au lieu de VARCHAR(255) c'est DT_STR et la largeur de la colonne de sortie peut être fixée à 255 . Para VARCHAR(MAX) c'est DT_TEXT .

Ainsi, dans la sélection de la source de données, dans le champ Advanced modifiez le type de données de toutes les colonnes incriminées en passant de DT_STR a DT_TEXT (Vous pouvez sélectionner plusieurs colonnes et les modifier toutes en même temps).

Import and Export Wizard - Data Source - Advanced

2voto

David W Points 5303

Cette réponse ne s'applique peut-être pas universellement, mais elle a permis de résoudre l'erreur que je rencontrais lors de l'importation d'un petit fichier texte. Le fournisseur de fichiers plats effectuait l'importation sur la base de colonnes de texte fixes de 50 caractères dans la source, ce qui était incorrect. Le remappage des colonnes de destination n'a eu aucun effet sur le problème.

Pour résoudre le problème, dans la fenêtre "Choose a Data Source" du fournisseur de fichiers plats, après avoir sélectionné le fichier, un bouton "Suggest Types " apparaît sous la liste des colonnes d'entrée. Après avoir cliqué sur ce bouton, même si aucune modification n'a été apportée à la boîte de dialogue d'utilisation, le fournisseur de fichiers plats interroge à nouveau le fichier source .csv, puis correctement a déterminé les longueurs des champs dans le fichier source.

Une fois que cela a été fait, l'importation s'est déroulée sans autre problème.

0voto

Sonam Points 3358

Je pense que c'est un bug, veuillez appliquer la solution de contournement et réessayer : http://support.microsoft.com/kb/281517 .

De plus, allez dans l'onglet Avancé, et confirmez que la longueur des colonnes cibles est Varchar(max).

0voto

dbd Points 310

L'éditeur avancé n'a pas résolu mon problème, j'ai été obligé d'éditer le fichier dtsx avec le bloc-notes (ou votre éditeur texte/xml préféré) et de remplacer manuellement les valeurs des attributs par les suivantes

length="0" dataType="nText" (J'utilise l'unicode)

Faites toujours une sauvegarde du fichier dtsx avant de l'éditer en mode texte/xml.

Exécution de SQL Server 2008 R2

0voto

Lokesh Points 1

Allez sur l'onglet Advanced----> data type of column---> Ici, changez le type de données de DT_STR à DT_TEXT et la largeur de la colonne 255. Vous pouvez maintenant vérifier que tout fonctionne parfaitement.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X