|
またまたSSISで想定外の動きをする現象が起こった。
フラットファイル接続マネージャで取得しているCSVファイルの一部の列だけが
なぜか読めなく(空白で出力される)なるという現象。
読み込んでいたCSVファイルは、
Shift_JISエンコード、半角カンマ(,)区切り、改行コードがCR+LFのごくごく一般的なもの。
大量のCSVレコードのうち、ある特定の行データの特定の列だけ
その現象が起きるため、その行データの列の値がおかしいと思って
値変えたり、文字コード調べたり、前後のセルやカンマが変な値になってないか調べたりしたんだけど
全然解決しない。
で、もしかしたら離れている別の列のせいかと考え、必須列以外を全部取込まないようにしてテスト。
そうすると今まで取れていなかった列の値が取れるようになったのはいいけど、
今度は今まで取れていた列の値が取れなくなった。
しかも、全く同じファイル接続マネージャを使っている別のデータフローだと
またまた違うセルの値が取れないような結果がでたり。
面白いのが、全部プレビューだとちゃんと取れているように見えるけど、実行すると結果が違うところ。
ココからちょっと思ったのが、もしかして文字コードのせいと思い
ためしにUnicodeで取得するにチェック入れてみた。→結果、全列空白文字
んんん?????
UnicodeでShift_JISにしたら全部取れないってそりゃそうだよなぁ。
あれ?Shift_JISだけど、出力列のDataTypeにDT_WSTRとか指定してたような。。。。。
DT_WSTRな列を全部DT_STRに変更→結果、全部読める
ちょwwwwwwwwwwwwwww
DBの型がnvarcharだったのでフラットファイルの列の変換型もDT_WSTRにしたんだけど
どうやらフラットファイル接続マネージャでShift_JISのファイルを読むときに
変換型にUnicodeが混じってると、Unicodeじゃない列が取込めなくなるときがある模様。
ハァ、疲れる。。。
|