Importer un Package d'Erreur Ne peut pas Convertir entre Unicode et Non Unicode Type de Données String
J'ai fait un dtsx paquet sur mon ordinateur à l'aide de SQL Server 2008. Il importe des données à partir d'un point-virgule délimitée fichier csv dans une table où tous les types de champs sont de type NVARCHAR MAX.
Il fonctionne sur mon ordinateur, mais il a besoin pour fonctionner sur les clients du serveur. Chaque fois qu'ils créent le même paquet avec le même fichier csv et de la table de destination, ils reçoivent l'erreur ci-dessus.
Nous sommes allés à travers la création du package, étape par étape, et tout semble OK. Les mappages sont tout à fait correct, mais quand ils courent le paquet dans la dernière étape, ils reçoivent cette erreur. Ils sont à l'aide de SQL Server 2005.
Quelqu'un peut conseiller l'endroit où commencer à chercher pour ce problème?
- Ce service pack utilisez-vous au client?
Vous devez vous connecter pour publier un commentaire.
Le problème de la conversion de non-unicode source d'unicode table SQL Server peut être résolu par l':
À un certain point, vous essayez de convertir un
nvarchar
colonne à unevarchar
colonne (ou vice-versa).D'ailleurs, pourquoi tout est (soi-disant)
nvarchar(max)
? C'est une odeur de code si je n'ai jamais vu un. Êtes-vous conscient de la façon dont SQL Server stocke ces colonnes? Ils utilisent des pointeurs à l'endroit où la colonne est stockée depuis les lignes réelles, car elles ne cadrent pas dans les 8k pages.Non-Unicode string types de données:
Utilisation STR pour le fichier texte et VARCHAR pour les colonnes SQL Server.
Chaîne Unicode types de données:
Utilisation W_STR pour le fichier texte et NVARCHAR pour les colonnes SQL Server.
Le problème est que vos types de données ne correspondent pas, alors il pourrait être une perte de données lors de la conversion.
Deux solutions:
1 - si le type de la colonne cible est [nvarchar] il convient de changer de [varchar]
2 - Ajouter un "Dérivé de la Colonne" composant le package SSIS et ajouter une nouvelle colonne avec l'expression suivante:
(DT_WSTR, «longueur») [Nomrubrique]
Longueur est la longueur de la colonne dans la table cible et ColumnName est le nom de la colonne dans la table cible.
enfin, à la partie de la cartographie, vous devriez utiliser cette ajout d'une nouvelle colonne à la place de la colonne d'origine.
Ne sais pas si c'est une meilleure pratique avec SSIS, mais parfois je trouve que leurs outils sont un peu maladroit quand vous voulez faire ce type d'activité.
Au lieu d'utiliser leurs composants, vous pouvez convertir les données au sein de votre requête
Au lieu de faire
Vous pourriez faire
Ce une solution qui utilise l'IDE pour corriger:
Data Conversion
article à votre flux de données, comme indiqué ci-dessous;Data Conversion
élément, et le définir comme indiqué:DB Destination
élément, Cliquez surMapping
, et de s'assurer que votre Colonne d'entrée est en fait le même que venant de la Copie de [votre nom de colonne], qui est en fait leData Conversion
production qui n'est PAS leDB Source
de Sortie (attention ici). Voici une capture d'écran:Et thats it .. enregistrez et exécutez ..
Mike, j'ai eu le même problème avec SSIS dans SQL Server 2005...
Apparemment, le DataFlowDestination objet tentera toujours de valider les données,
en Unicode. Aller à cet objet, l'Éditeur Avancé, Composant le volet Propriétés, modifiez le "ValidateExternalMetaData" valeur False à la propriété. Maintenant, allez à l'Entrée et la Sortie du volet Propriétés, d'Entrée de la Destination, des Colonnes Externes - définir chaque type de Données de colonne et de la Longueur afin de correspondre à la table de base de données il va. Maintenant, lorsque vous fermez l'éditeur, ceux de la colonne modifications seront enregistrées et validées par-dessus, et il va fonctionner.
Suivez les étapes ci-dessous pour éviter (ne peut pas convertir entre unicode et non-unicode types de données string) cette erreur
i) Ajouter la conversion des Données outil de Transformation de votre Flux de données.
ii) Pour ouvrir le Flux de données de Conversion et sélectionnez [string DT_STR] type de données.
iii) Ensuite, allez à Destination des flux, sélectionnez la Cartographie.
iv) de modifier vos i/p nom pour copier le nom.
Obtenir le registre de configuration du client et changer la LANG.
Pour Oracle, allez à la RÉUNION de haut niveau\SOFTWARE\ORACLE\KEY_ORACLIENT...ACCUEIL\NLS_LANG et le changement de langue approprié.
Le dts de la Conversion de données de la tâche est temps de prendre s'il y a plus de 50 colonnes!Trouvé un correctif pour résoudre ce au lien ci-dessous
Cependant, il ne semble pas fonctionner pour les versions au-dessus de 2008. Donc, c'est comment j'ai dû contourner le problème
Résolue à la demande initiale:
J'ai vu cela avant. Facile à fixer (n'avez pas besoin de toutes ces données, les étapes de conversion que TOUTES les méta-données sont disponibles à partir de la connexion à la source):
Supprimer la Source de données OLE DB & OLE DB Destinations
Assurez-vous Retardé la Validation est FAUX (vous pouvez l'activer plus tard)
Recréer la Source OLE DB avec votre requête, etc.
Vérifier dans l'Éditeur Avancé que toutes les données de sortie les types de colonnes sont corrects
Recréer votre Destination OLE DB, carte, créer une table (ou de changer à l'existant) et vous verrez que SSIS obtenu tous les types de données correct (même source).
Beaucoup plus facile que les trucs ci-dessus.
Ne sais pas si c'est encore un problème, mais j'ai trouvé cette solution simple:
Espère que c'était clair et facile à suivre
Quelque temps, nous avons obtenu ce message d'erreur lorsque l'on sélectionne caractère statique comme un champ dans la requête source/view/procédure et de la destination, type de données de champ au format Unicode.
Ci-dessous est la question que j'ai rencontrés:
J'ai utilisé le script ci-dessous à la source
et j'ai obtenu le message d'erreur
Column "CATEGORY" cannot convert between Unicode and non-Unicode string data types.
comme ci-dessous:message d'erreur
Résolution:
J'ai essayé plusieurs options, mais aucune n'a fonctionné pour moi. Ensuite, j'ai préfixé la valeur statique avec N de faire en Unicode comme ci-dessous:
Si quelqu'un est encore confronté à ce problème, j'ai trouvé qu'elle est liée à une différence dans Oracle versions de Client.
J'ai posté mon expérience complète et la solution ici: https://stackoverflow.com/a/43806765/923177
J'ai changé ValidateExternalMetadata=False pour chaque tâche de transformation. Il a travaillé pour moi.