2011-12-19 18 views
4

ASCIIフラットファイルソースからデータを読み取り、SQL Server 2008データベースに書き込むSSIS 2008パッケージを作成しています。 BIDSは、Unicodeデータ型と非Unicodeデータ型間の暗黙のキャストについて不平を言っていたので、キャストを作成するために派生した列ツールを使用しました。これは、次のようになります。SSISがキャストされていないDT_WSTRにキャストされている、そう思われる

Derived Column Name | Derived Column | Expression   | Data Type 
AccountName2   | Replace 'AName' | (DT_WSTR,100) AName | string [DT_STR] 

私はまだ同じエラーを取得しています:

Validation error. InsertAccountRecords: InsertAccountRecords: Columns "AccountName2" and "AName" cannot convert between unicode and non-unicode string data types. 

エラーは問題があると信じて私をリードし、SQL Serverの先にまで見せています派生列のデータ型。私はそれをDT_STRからDT_WSTRにキャストしようとしていますが、Data Typeはこれによれば名目上DT_STRです。

私はグーグルで回りましたが、私はこの質問に対して良い答えを見つけることはできません。誰でもガイダンスを提供できますか?

編集:はい。派生列の下流のデータビューアを見ると、AccountName2はまだDT_STRとして出ています。なぜキャストキャスティングではないのですか?

答えて

8

documentationは、新しい列の追加を選択した場合にのみ、新しいデータ型が正しく設定されることに注意してください。 [派生列]ドロップダウンで[新しい列として追加]を選択する必要があります。

データ変換の変換のみを使用してください。これは、データ型の変更が唯一の変換である場合はおそらく簡単です。

+0

はい。これは100%のケースであり、Data Converstion変換を追加すると、作業がはるかに簡単になりました。 – Chris

+0

まだ、私はなぜ、なぜ、なぜ、不思議にしなければならないのですか? 置き換え時にデータ型を正しく設定しない理由は何ですか? – igorludi

+0

@igorludiわかりませんが、SSISはデータ型の処理に関して非常に慎重です。暗黙の変換は許可されません。だから、私の推測では、単一の列はパッケージ内のさまざまな場所で異なるデータ型を持つことができないという設計上の決定がなされたことになります。これは、誰かが新しいデータ型変換を追加して、 '下流'ロジックを更新しないために、パッケージが突然破損する問題を回避します。新しい列を使用すると、パッケージ全体を更新する必要があります。また、系統解析のようなメタデータ操作が簡単になる可能性があります。しかし、私はこの推測の証拠がありません。 – Pondlife

関連する問題