web-dev-qa-db-ja.com

Unicodeと非Unicodeエラー間のSSIS変換

SQL Server 2005テーブルにリンクするOLEDBソースを使用しているssisパッケージがあります。日付列を除くすべての列はNVARCHAR(255)です。 Excelの宛先を使用し、SQLステートメントを使用してExcelワークブックにシートを作成していますが、SQLはExcel接続マネージャーにあり(事実上、シートを作成するテーブル作成ステートメント)、 DB。

私が何をしたとしても、このユニコードを取得し続けます->ソースとデスティネーション間の非ユニコード変換エラー。 S> Dの間でstring [DT_STR]への変換を試み、それを削除し、SQLテーブルVARCHARをNVARCHARに変更しても、このフリップピンエラーが発生します。

SQLステートメントを使用してExcelでシートを作成しているため、Excelシートで列のデータ型を実際に事前定義する方法がわかりません。デフォルトのメタデータになると思いますが、わかりません。

SQLテーブルの宛先と、このSSIS SQLステートメントを使用したExcelシートの作成の間で、このエラーが表示されるのをどのように停止できますか?

私のエラーは:

データフロータスクでのエラー[OLE DBソース[1]]:列 "MyColumn"は、Unicode文字列データ型と非Unicode文字列データ型の間で変換できません。

そして、すべてのnvarchar列に対して。

ヘルプを感謝します

ありがとう

アンドリュー

51
Andrew

データ変換変換を追加して、文字列列を非Unicode(DT_STR)からUnicode(DT_WSTR)文字列に変換します。

すべての文字列列に対してこれを行う必要があります...

58
user3459499

以下のステップは私のために働いた:

1)。ソースタスクを右クリックします。

2)。 「高度なエディターを表示」をクリックします。 ssisのソースタスクの高度な編集オプション

3)。 「入力および出力プロパティ」タブに移動します。

4)。エラーが発生している出力列を選択します。

5)。そのデータ型は「String [DT_STR]」になります。

6)。そのデータ型を「Unicode String [DT_WSTR]」に変更します。 データ型をユニコード文字列に変更する

7)。保存して閉じます。お役に立てれば!

50
amar_soni
  1. 最初に、データフロー図にデータ変換ブロックを追加します。

  2. データ変換ブロックを開き、エラーが表示されている列にチェックマークを付けます。以下で、データ型をUnicode文字列(DT_WSTR)または予想される任意のデータ型に変更して保存します。

  3. 宛先ブロックに移動します。その中のマッピングに移動し、新しく作成された要素を対応するアドレスにマッピングして保存します。

  4. ソリューションExplorer.selectプロパティでプロジェクトを右クリックします。構成プロパティを選択し、その中でデバッグを選択します。これで、Run64BitRunTimeオプションをfalseに設定します(Excelは64ビットアプリケーションをうまく処理できないため)。

15
Sanket Nalavade

以前に提案されたData Conversionを追加する代わりに、nvarchar列をvarchar列にキャストできます。これにより、不要なステップを回避でき、代替手段よりも高いパフォーマンスが得られます。

SQLステートメントの選択で、dateCAST(date AS varchar([size]))に置き換えます。何らかの理由で、これはまだ出力データ型を変更しません。これを行うには、次の手順を実行します。

  1. OLE DB Sourceステップを右クリックして、高度なエディターを開きます。
  2. 入力および出力プロパティに移動
  3. 出力列を選択
  4. 列を選択してください
  5. [データ型のプロパティ]で、DataTypeを文字列[DT_STR]に変更します
  6. 長さをCASTステートメントで指定した長さに変更します

これを行うと、ソースデータがvarcharとして出力され、エラーが消えます。

ソース

7
Stefan

ここで不足している部分はData Conversionオブジェクトです。 OLE DB SourceおよびDestinationオブジェクトの間にある必要があります。

enter image description here

4

Windowsで実行されているOracle 12 Serverに接続されているOracleバージョン12クライアント32ビットクライアントをインストールしたときに、この状態が発生しました。 Oracle-sourceとSqlServer-destinationはどちらもUnicodeではありませんが、Oracle列がUnicodeであるかのように、このメッセージを受け取り続けました。データ変換ボックスを挿入する問題を解決し、varchar2フィールドにDT-STR(ユニコードではない)タイプを選択し、数値フィールドにDT-WSTR(ユニコード)を選択すると、出力フィールド名から「COPY OF」を削除しました。変換タイプを設定する前にソースボックスの矢印を変換ボックスに接続したため、エラーが発生し続けていることに注意してください。そのため、ソースボックスを切り替える必要があり、これにより宛先ボックスのすべてのエラーがクリーンになりました。

3
user3350868

上記の例では、値を失い続けましたが、検証を遅らせることで、新しいデータ型をメタデータの一部として保存できると思います。

「Excel接続マネージャー」の接続マネージャーで、プロパティから遅延検証をFalseに設定します。

次に、ExcelのデータフローのDestinationタスクで、再度プロパティからValidationExternalMetaDataをFalseに設定します。

これにより、Excel宛先タスクを右クリックして、Excel宛先の詳細エディターに移動できます->右端のタブ-入力および出力のプロパティ。 [外部列]フォルダーセクションで、問題のある列のデータ型と長さの値を変更できるようになり、これを保存できるようになりました。

幸運を!

2
Theo

私は同じ問題を抱えていて、ここに書かれたすべてを試しましたが、それでも私に同じエラーを与えていました。変換しようとしていた列のNULL値であることが判明しました。

NULL値を削除することで問題が解決しました。

乾杯、アーメド

1
Ahmed Noman