2011-01-14 13 views
6

私は現在、SSIS 2008を使用して古いAdvantageデータベースサーバーからSQL 2005への移行を進めています。古いAdvantageデータベースの列の1つはMEMOタイプです。デフォルトでは、これはDT_TEXT列に変換されます。新しいデータベースでは、このような大規模なフィールドは必要ありませんが、VARCHAR(50)などに制限することができます。今、私はさらに一歩進み、空の文字列で、すべてのNULL値を置き換えたいSSIS ISNULLから空の文字列

(DT_STR,50,1252)[ColumnName] 

:私は成功し、次の式でこれを変換する派生列変換を設定します。だから、明らかにこれはISNULL([ColumnName])?"":(DT_STR,50,1252)[ColumnName]式を使用して十分に簡単に見えるだろうが、問題は、OLE DB先は、次のエラー

は、ユニコードと非ユニコード文字列の間の変換はできません。含まれていることです...

ISNULL式全体がデータ型をUnicode文字列[DT-WSTR]に変換します。私は、表現や部分ごとにさまざまなキャストを試みましたが、必要なものに合わせてデータ型を取得することはできません。

まず、DT_TEXT型を直接Unicodeに変換できますか?私が知ることから、キャストはそのようには機能しません。そうでない場合、NULL値が空の文字列に変換されるように式を取得する方法がありますか?

ありがとうございました!

答えて

0

私は何かを考え出しました。それは最良の解決策ではないかもしれませんが、私の状況ではうまくいくでしょう。

私のOLE DBソースからは、最初に派生カラムを作成しました。これはISNULLを使って、それをDT_WSTRのUnicode型に変換しました。必要な型に戻すためのキャストは得られませんでしたが、次にDerived ColumnとOLE DB Destinationの間にデータ変換変換を追加しました。これは入力文字列を受け取り、それをDT_STRに戻します。これは何度も邪魔にならないと感じていますが、私は心配してはいけないファンキーな情報が列に含まれていないので、うまくいくと思います。

解決策を熟考した皆さん、ありがとうございました。もしあなたがそれに取り組む素晴らしい方法を見つけたら、私は興味をそそられるでしょう。

2

派生列でこれを試してください。

(DT_STR,50,1252) (ISNULL(ColumnName) ? "" : (DT_STR,50,1252) ColumnName) 

これには、希望の処理順序を保証するために、カッコ内に条件(?)を付けた追加の型キャストが含まれています。私は元の式が暗黙的にDT_WSTRにキャストしていたと思います。なぜなら、デフォルトはDT_WSTRです。この新しいバージョンでは、式が評価された後で、キャストを強制的にDT_STRにします。

+0

私はこれを多くのキャスティングの試みで試しました。 (DT_STR、50,1252)(DT_STR、50,1252) "(DT_STR、501252)ColumnName ...まだ運がない。アイデア、と私は私の鋳造に何か間違っていない限り、それは動作しなくなった –