2009-04-29 5 views
0

Je télécharge des données de DB2 vers SQL2005. La table contient un champ de texte de 2000 caractères dans DB2 mais est configuré en tant que varchar (2000) dans SQL. Lorsque j'exécute mon insertion dans le navigateur de requêtes, elle fonctionne correctement et les données sont copiées correctement. Cependant, lorsque la même instruction s'exécute dans ma procédure stockée, les données de cette zone sont copiées incorrectement et sont affichées comme une série de caractères étranges .Problème lors de l'insertion de données dans un champ varchar à l'aide d'une procédure stockée

Le champ peut parfois contenir des caractères de contrôle, mais le problème se produit même si ce n'est pas le cas.

Y a-t-il un paramètre que je dois appliquer à ma procédure stockée pour que l'insertion fonctionne correctement?

Ou ai-je besoin d'utiliser un cast ou de convertir sur les données afin de le faire apparaître correctement.

Merci.

Mise à jour: Merci pour vos suggestions. Il semble maintenant que le problème a été causé par le logiciel que nous avons utilisé pour créer le serveur lié contenant la base de données DB2. Cela ne pouvait pas gérer un champ 2000 caractères lors d'une procédure stockée, mais pourrait fonctionner de manière interactive. J'ai fini par contourner le problème en épissant le champ en 10 champs longs de 200 caractères pour le téléchargement, puis je les ai rejoints lorsqu'ils étaient dans la base de données SQL.

Répondre

0

Ce problème a été causé par le logiciel tiers que nous avons utilisé pour créer le serveur lié à la base de données DB2. Cela ne pouvait pas gérer un champ 2000 caractères lors d'une procédure stockée, mais pourrait fonctionner de manière interactive. J'ai fini par contourner le problème en épissant le champ en 10 champs longs de 200 caractères pour le téléchargement, puis je les ai rejoints lorsqu'ils étaient dans la base de données SQL.

1

Il semble que les données provenant de DB2 se trouvent dans un jeu de caractères différent. Vous devriez vous assurer que ce n'est pas EBCDIC ou quelque chose comme ça.

Également, essayez d'appeler votre procédure stockée à partir de SQL Server Management Studio (navigateur de requêtes), pour voir si cela fonctionne.

+0

Mais les données sont correctement copiées lors de l'exécution dans le navigateur de requêtes. S'il s'agissait d'un jeu de caractères différent, ne le ferait-il pas également? La procédure stockée fonctionne dans tous les autres cas, ce n'est que la conversion de données pour ce champ qui pose problème. – mfdoran

+0

@mfdoran, comment les données entrent-elles dans le navigateur de requêtes? est-ce que vous le copiez/collez de quelque part? Si tel est le cas, Windows pourrait être automatiquement converti en Ascii sur le collage. –

+0

@KMike via une requête SQL à la base de données DB2 afin qu'il ne s'agissait pas d'un problème de conversion Windows. Il semble maintenant que le problème a été causé par le logiciel que nous utilisons pour créer un serveur lié à la base de données DB2. Il pourrait gérer un champ de 2000 caractères lors de l'exécution dans le navigateur de requête, mais ne pourrait pas lors de l'exécution dans une procédure stockée. – mfdoran

0

Vous voudrez peut-être changer votre varchar (2000) en un nvarchars (2000) (dans la procédure stockée ainsi que la table - je suppose qu'il existe en tant que paramètre). Cela leur permettrait de contenir deux caractères octets. Cela dépendra de la configuration de DB2, mais il se peut qu'il exporte UTF-16 (ou similaire) plutôt que UTF-8.

Questions connexes