web-dev-qa-db-fra.com

Conversion SSIS entre les erreurs Unicode et non Unicode

J'ai un paquet ssis où j'utilise une source OLEDB liée à une table SQL Server 2005. Toutes les colonnes sauf une colonne de date sont NVARCHAR (255). J'utilise une destination Excel et une instruction SQL pour créer la feuille dans le classeur Excel. Le code SQL se trouve dans le gestionnaire de connexions Excel (en réalité une instruction create table qui crée une feuille) et est dérivé du mappage des colonnes du DB.

Peu importe ce que j'ai fait, je continue à avoir cette erreur de conversion unicode -> non-unicode entre ma source et ma destination. J'ai essayé de convertir la chaîne en chaîne [DT_STR] entre S> D, de la supprimer, de modifier la table SQL VARCHAR en NVARCHAR et d'obtenir toujours cette erreur d'accès.

Comme je crée la feuille dans Excel avec une instruction SQL, je ne vois aucun moyen de prédéfinir les types de données des colonnes dans la feuille Excel. J'imagine que ce serait une méta-donnée par défaut mais je ne le sais pas.

Donc, entre ma destination de table SQL et la création de ma feuille Excel avec cette instruction SQL SSIS, comment puis-je empêcher cette erreur de se produire?

Mon erreur est:

Erreur lors de la tâche de flux de données [source OLE DB [1]]: la colonne "MyColumn" ne peut pas convertir entre les types de données chaîne unicode et non unicode.

Et pour toutes les colonnes nvarchar.

Apprécier toute aide

Merci

Andrew

51
Andrew

Ajoutez des transformations de conversion de données pour convertir les colonnes de chaîne de chaînes non-Unicode (DT_STR) en chaînes Unicode (DT_WSTR).

Vous devez faire cela pour toutes les colonnes de chaîne ...

58
user3459499

Les étapes ci-dessous ont fonctionné pour moi:

1). clic droit sur la tâche source.

2) cliquez sur "Afficher l'éditeur avancé". option d'édition avancée pour la tâche source en ssis

3) Allez à l'onglet "Propriétés d'entrée et de sortie".

4) sélectionnez la colonne de sortie pour laquelle vous obtenez l'erreur.

5) Son type de données sera "String [DT_STR]".

6) Changez ce type de données en "Chaîne Unicode [DT_WSTR]". Modification du type de données en chaîne unicode

sept). sauver et fermer. J'espère que cela t'aides!

50
amar_soni
  1. Tout d’abord, ajoutez un bloc de conversion de données dans votre diagramme de flux de données.

  2. Ouvrez le bloc de conversion de données et cochez la colonne pour laquelle l'erreur est affichée. Ci-dessous, modifiez son type de données en chaîne unicode (DT_WSTR) ou le type de données attendu et sauvegardez-le.

  3. Aller au bloc de destination. Accédez au mappage et mappez l'élément nouvellement créé à l'adresse correspondante, puis enregistrez.

  4. Cliquez avec le bouton droit de la souris sur votre projet dans les propriétés de la solution Explorer.select. Sélectionnez les propriétés de configuration et sélectionnez le débogage dans celle-ci. Dans ce cas, définissez l'option Run64BitRunTime sur false (car Excel ne gère pas très bien l'application 64 bits).

15
Sanket Nalavade

Au lieu d'ajouter une conversion de données suggérée précédemment , vous pouvez convertir la colonne nvarchar en une colonne varchar. Cela vous empêche d'avoir une étape inutile et a une performance plus élevée que l'alternative.

Dans la sélection de votre instruction SQL, remplacez date par CAST(date AS varchar([size])). Pour une raison quelconque, cela ne modifie pas encore le type de données en sortie. Pour ce faire, procédez comme suit:

  1. Cliquez avec le bouton droit de la souris sur votre étape OLE DB Source et ouvrez l'éditeur avancé.
  2. Aller aux propriétés d'entrée et de sortie
  3. Sélectionner les colonnes de sortie
  4. Sélectionnez votre colonne
  5. Sous Propriétés du type de données, changez DataType en chaîne [DT_STR]
  6. Modifier longueur à la longueur que vous avez spécifié dans votre CAST instruction

Cela fait, vos données source seront sorties sous forme de varchar et votre erreur disparaîtra.

Source

7
Stefan

La pièce manquante ici est l'objet Data Conversion. Il doit être compris entre OLE Objet source et destination de base de données.

enter image description here

4
Serge Voloshenko

J'ai rencontré cette situation lors de l'installation du client 32 bits client Oracle version 12 connecté à un serveur Oracle 12 s'exécutant sous Windows. Bien que les sources Oracle et SqlServer-destination ne soient PAS UNICODE, je continuais à recevoir ce message, comme si les colonnes Oracle étaient Unicode. J'ai résolu le problème en insérant une boîte de conversion de données et en sélectionnant le type DT-STR (non unicode) pour les champs varchar2 et DT-WSTR (unicode) pour les champs numériques, puis j'ai supprimé le nom 'COPY OF' du nom du champ de sortie. Notez que j'ai continué à avoir l'erreur car j'avais connecté la flèche de la zone source à la zone de conversion AVANT de définir les types de conversion. J'ai donc dû changer de source et cela a effacé toutes les erreurs de la boîte de destination.

3
user3350868

Dans l'exemple ci-dessus, j'ai continué à perdre les valeurs. Je pense que le fait de retarder la validation permettra aux nouveaux types de données d'être enregistrés dans les métadonnées.

Sur le gestionnaire de connexions pour 'Gestionnaire de connexions Excel', définissez la Validation différée sur Faux dans les propriétés.

Ensuite, dans la tâche de flux de données Destination pour Excel, définissez ValidationExternalMetaData sur False, toujours à partir des propriétés.

Cela vous permettra désormais de cliquer avec le bouton droit de la souris sur la tâche de destination Excel et d'accéder à Editeur avancé pour la destination Excel -> onglet à l'extrême droite - Propriétés d'entrée et de sortie. Dans la section du dossier Colonnes externes, vous pourrez maintenant modifier les valeurs Types de données et Longueur des colonnes problématiques, et cela pourra maintenant être enregistré.

Bonne chance!

2
Theo

J'ai eu le même problème et j'ai tout essayé, mais cela me donnait toujours la même erreur. S'est avéré être la valeur NULL dans la colonne que j'essayais de convertir.

Supprimer la valeur NULL a résolu mon problème.

À la vôtre, Ahmed

1
Ahmed Noman