ストアドプロシージャを使用してvarcharフィールドにデータを挿入する際の問題
-
03-07-2019 - |
質問
DB2からSQL2005にいくつかのデータをアップロードしています。このテーブルには、DB2では2000文字のテキストフィールドが1つ含まれていますが、SQLではvarchar(2000)として設定されています。
クエリブラウザーで挿入を実行すると正常に処理され、データが正しくコピーされますが、同じステートメントがストアドプロシージャで実行されると、このフィールドのデータのみが誤ってコピーされ、一連の奇妙な文字として表示されます。
フィールドには制御文字が含まれることがありますが、含まれていない場合でも問題が発生します。
挿入を正しく機能させるために、ストアドプロシージャに適用する必要がある設定はありますか?
または、正しく表示されるようにするには、データをキャストまたは変換する必要がありますか。
ありがとう。
更新:ご提案いただきありがとうございます。この問題は、DB2データベースを含むリンクサーバーの作成に使用したソフトウェアが原因で発生したようです。これは、ストアドプロシージャを介して実行される場合は2000文字のフィールドを処理できませんでしたが、インタラクティブに実行される場合は可能です。
最終的に、アップロードのためにフィールドを10 200文字の長さのフィールドにつなぎ合わせてから、SQLデータベースにあるときにそれらを再度結合することで問題を回避しました。
解決 3
この問題は、DB2データベースへのリンクサーバーの作成に使用したサードパーティソフトウェアが原因で発生しました。これは、ストアドプロシージャを介して実行される場合は2000文字のフィールドを処理できませんでしたが、インタラクティブに実行される場合は可能です。
最終的に、アップロードのためにフィールドを10 200文字の長さのフィールドにつなぎ合わせてから、SQLデータベース内にあるときにそれらを再度結合することで問題を回避しました。
他のヒント
db2からのデータは別の文字セットにあるようです。 EBCDICまたはそのようなものではないことを確認する必要があります。
また、SQL Server Management Studio(クエリブラウザ)からストアドプロシージャを呼び出して、動作するかどうかを確認してください。
varchar(2000)をnvarchars(2000)に変更したい場合があります(ストアドプロシージャとテーブル内-パラメータとして存在すると仮定します)。これにより、2バイト文字を保持できます。 DB2の構成に依存しますが、UTF-8ではなくUTF-16(または同様の)をエクスポートしている可能性があります。