Problème lors de l'insertion de données dans un champ varchar à l'aide d'une procédure stockée

StackOverflow https://stackoverflow.com/questions/801978

  •  03-07-2019
  •  | 
  •  

Question

Je télécharge des données de DB2 vers SQL2005. La table contient un champ de texte de 2 000 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 traite correctement et les données sont copiées correctement. Toutefois, lorsque la même instruction est exécutée dans ma procédure stockée, les données de ce champ uniquement sont copiées de manière incorrecte et s'affichent sous la forme d'une série de caractères étranges.

Le champ peut parfois contenir des caractères de contrôle, mais le problème se produit même s'il ne le fait pas.

Dois-je appliquer un paramètre à ma procédure stockée pour que l'insertion fonctionne correctement?

Ou dois-je utiliser une conversion ou une conversion sur les données afin de les faire apparaître correctement.

Merci.

Mise à jour: Merci pour vos suggestions. Il semble maintenant que le problème soit dû au logiciel que nous avons utilisé pour créer le serveur lié contenant la base de données DB2. Cela ne peut pas gérer un champ de 2 000 caractères lorsqu'il est exécuté via une procédure stockée, mais peut le faire de manière interactive.

J'ai finalement résolu le problème en divisant le champ en 10 champs de 200 caractères pour le téléchargement, puis en les réunissant à nouveau lorsqu'ils se trouvaient dans la base de données SQL.

Était-ce utile?

La solution 3

Ce problème est dû au logiciel tiers utilisé pour créer le serveur lié à la base de données DB2. Cela ne peut pas gérer un champ de 2 000 caractères lorsqu'il est exécuté via une procédure stockée, mais peut le faire de manière interactive.

J'ai finalement résolu le problème en divisant le champ en 10 champs de 200 caractères pour le téléchargement, puis en les réunissant à nouveau lorsqu'ils se trouvaient dans la base de données SQL.

Autres conseils

On dirait que les données provenant de db2 sont dans un jeu de caractères différent. Vous devez vous assurer que ce n'est pas EBCDIC ou quelque chose comme ça.

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

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

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top