web-dev-qa-db-ja.com

SSISパッケージ:Unicodeと非Unicodeの文字列データ型間の変換

Oracle DBに接続していますが、接続は機能しますが、一部の列で次のエラーが発生します。

_Description: Column "RESOURCE_NAME" cannot convert between unicode 
and non-unicode string data types.
_

RESOURCE_NAMEの値:

  • Oracleの場合:VARCHAR2(200 BYTE)
  • SQL Serverの場合:VARCHAR(200 BYTE)

Oracle SQL Developerを介してOracle DBに問題なく接続できます。また、SSISパッケージ設定_Run64BitRuntime = False_があります。

5
Jeremy F.

Oracleデータ型VARCHAR2は、SQL ServerではNVARCHAR、SSISではDT_WSTRと同等のように見えます。 参考

Data Conversion Transformation、またはSQL ServerのCASTまたはCONVERT関数を使用して変換する必要があります。

11
Mike Henderson

パッケージが1つのマシンで機能し、他のマシンでは機能しない場合。 NLS_LANGを適切な言語、地域、文字セットに設定して、パッケージをテストしてください。

[Command Prompt]> set NLS_LANG=AMERICAN_AMERICA.WE8ISO8859P1
3
Jay Akhawri

これを回避する最も簡単な方法は、SSISパッケージをメモ帳(dtsxファイル)で開き、グローバルな検索とすべてのインスタンスの置換を行うvalidateExternalMetadata = "True" with validateExternalMetadata = "False"を使用します。

注:SSISを介してLinux上のOracle 11gデータベースに接続すると、この問題が発生しました。

2
rip747

SSISでSQLコマンドを使用し、CONVERTまたはCASTを使用できます。それでもSSISでエラーが発生する場合は、メタデータが原因です。これを修正する方法は次のとおりです。

  1. 詳細エディターを開きます。
  2. [入力]および[出力]プロパティで、[ソース出力]を展開します。
  3. 出力列を展開する
  4. 問題の原因となっている列を選択します。
  5. データ型のプロパティに移動し、DataTypeを目的の型のDT_STR、DT_Textなどに変更します。
1
shockwave

oledbソース->高度なエディターオプション->入力/出力列->出力列-> RESOURCE_NAME列を選択し、データ型をDT_WSTRに変更し、長さも必要に応じて変更できます

1
USER9999

上からすべてが失敗した場合。テーブル変数を作成し、そこにデータを挿入します。次に、すべてのレコードをソースとして選択します。スクリプトでSET NOCOUNT ONを使用します。

0

データフローの「Data Conversion」ブロックをダブルクリックするだけで、すべてのアイテムで「Unicode String [DT_WSTR]」に変更できます。

作品

0
user2860427