2011-10-26 9 views
5

SSISプロジェクトの途中で、特定のテーブルフィールドがchar(30)からnvarchar(30)に変更されましたOLEDBコネクタで間違った列の種類を取得するSSIS

ただし、SSISパッケージを実行すると、cannot convert from unicode to non-unicodeというエラーが表示されます。 データベースソースから目的地に直接データを転送しようとしています。

どちらの接続も同じデータベーススキーマを使用するので、変換は必要ありません。

外部列のデータ型をチェックするとD_STRが表示されますが、これはもう異常ではありません。

私は、キャッシュされたデータの任意の並べ替えを浄化することを望んで、ソースと宛先の両方を削除しようとしましたが、機能しませんでした。

アイデア?

答えて

16

データフロータスクのメタデータのようなサウンドはキャッシュされ、新しいタイプを反映するためにリフレッシュする必要があります。

ソースを開き、列に移動して列のチェックを外し、列を確認します。 [OK]をクリックします。メタデータは今更新する必要があります。

+0

それはそれでした。私は、フロー内のキャッシュされたメタデータをリセットする方法を見つけることができませんでしたが、そのトリックでした。ただし、宛先のマッピングを再作成する必要があるため、これを行う必要があります。S – cfrag

+1

各列をデータが流れるパイプとみなします。設計時に、あなたは30バイトが流れるパイプを必要としているとssisに伝えました。次に、実行時に、30バイトのパイプを通して60バイトを詰め込もうとしました。列のチェックを外して再チェックすると、ssisはデータを見直して30を60バイトのパイプに置き換えました。 – brian

+3

私はメタデータの必要性を理解しています。私が理解していないことは、 "サイズ変更"を強制するための "カラムメタデータのリフレッシュ"ボタンがないことです。代わりに、配管全体をやり直す必要があります。 – cfrag

1

nvarcharとncharはユニコードです。逆に、varcharとcharは非Unicodeです。その結果、

http://msdn.microsoft.com/en-us/library/ms187752.aspx

あなたが別のデータ型からデータを移動している場合は、いくつかの追加の変換(CASTまたはCONVERT)を実行する必要があります。他のオプションは、charはDT-STRのSSISデータ型を使用し、nvarchar型は、私ははるかに特定することはできませんあなたのパッケージがどのように動作するかを知ることがなければSSISデータ型DT-WSTR

http://msdn.microsoft.com/en-us/library/ms141036.aspx

を使用するように、あなたのアダプタを見ていますしかし、うまくいけば、これはあなたを得るでしょう。

+0

データを変換していませんでした。パッケージは、両方のテーブルにまったく同じ列を持つ単純な「テーブルAからテーブルBへの転送」でした。何が起こったのは、特定の時点で両方のテーブルがその特定の列を変更したことですが、SSISはそれに気付いていないようでした。 – cfrag

関連する問題