web-dev-qa-db-ja.com

非Unicode文字列をUnicode文字列SSISに変換する

データベースから空のExcelファイルにデータをエクスポートするパッケージを作成しています。ソースコンポーネントと宛先コンポーネントのみを追加してパッケージを実行すると、出力列と列 "A"はUnicodeと非Unicodeの文字列データ型の間で変換できないという変換エラーが発生しました。

これを修正するために、データ変換コンポーネントを追加し、すべての列を

「Unicode文字列[DT_WSTR]」

エラーはもう発生しません。唯一の問題は、約50列あり、1つずつ移動して、ドロップダウンリストから[Unicode String [DT_WSTR]]を選択する必要があることです。次に、宛先コンポーネントに移動して、新しく変換された列をExcelファイルにマップする必要がありました。

私の質問は、他の誰かがこれに遭遇した場合、すべての手動の​​データ型変換を行わなければならないより効率的な方法はありますか?すべての列を1つずつ変換してマップする必要があることは、特に行数が多い場合は現実的ではないようです。

Excelファイルはデータのインポートとエクスポートに最適な方法ではないことを理解していますが、これはこの特定のケースで必要なことです。

フラットテキストファイルにエクスポートして、パッケージの最後の手順としてExcelに変換する方法を探す場合があります。私はこれが同じユニコード/非ユニコード変換エラーを引き起こさないことを期待しています。

9
Juan Velez

RDCの代わりに、SSISでのデータ型の変換をスキップして、ソースクエリでnvarcharとして明示的にキャストします。

使用法

ソースクエリ(およびはソースクエリを使用しておりnotでテーブルを選択するだけですドロップダウン)、適切なn(var)charの長さに明示的にキャストします。

の代わりに

_SELECT
    E.BusinessEntityID
,   E.NationalIDNumber
,   E.LoginID
,   E.JobTitle
,   E.BirthDate
,   E.MaritalStatus
,   E.Gender
FROM
    HumanResources.Employee AS E
_

次のようなクエリを使用します

_SELECT
    CAST(E.BusinessEntityID AS nvarchar(10)) AS BusinessEntityID
,   CAST(E.NationalIDNumber AS nvarchar(15)) AS NationalIDNumber
,   CAST(E.LoginID AS nvarchar(256)) AS LoginID
,   CAST(E.JobTitle AS nvarchar(50)) AS JobTitle
,   CAST(E.BirthDate AS nvarchar(10)) AS BirthDate
,   CAST(E.MaritalStatus AS nchar(1)) AS MaritalStatus
,   CAST(E.Gender AS nchar(1)) AS Gender
FROM
    HumanResources.Employee AS E
_

AdventureWorksの賢い生徒は、データが既にn(var)char型であることを認識しますが、これは単に概念を示すためのものでした。

利点

  • 使用されるメモリが少ない。現在、SSISで_Data Conversion Component_を使用して、「同じ」データの2つのコピーを割り当てて保存します。
  • いいえ [〜#〜] rsi [〜#〜] 。 N回クリックする必要はなく、それらが提供する恐ろしい小さなエディターですべての情報を指定する必要はありません。 dmv/information_schemaに対するクエリを使用して、「Excel対応」テーブルエクスポートの生成をさらに自動化します。
  • カスタムコンポーネントのインストールはありません。私はオープンソースのインストールが禁止されている場所で働いてきました。サードパーティのアプリのインストールには、メンテナンス費用が延期されます。これは、「誰もが」コードを維持するために同じアプリをインストールする必要がありサーバーにインストールする必要があるためですandinfosecはアセンブリが有効であることを確認するためにアセンブリを精査する必要がありますand私たちはあなたをしのぐバジリオンの人々からのサインオフが必要です...
15
billinkc

本来、それを行う方法はありません。ただし、Codeplexから- Replaceing Data Conversion Component for SSIS をダウンロードして、一発で実行できます。

詳細は here を参照してください。

5
Kin Shah

「Unicode文字列(DT_WSTR)」から「文字列(DT_STR)」またはその逆に変更するだけの場合は、次のようにします。

  1. Package.dtsx-ファイルのコピーを保存します(回復する必要がある場合)
  2. エディターでpackage.dtsxを開くか、MS Visual Studioでパッケージを右クリックして[コードの表示]を選択します。 XMLファイルが表示されます。

文字列DTS:DataTypeを検索し、その後に= "130"が続く場合、列はDT_WSTR(ユニコード)として定義されます。

= "129"が後に続く場合、列はDT_STR(非Unicode)として定義され、検索と置換に注意してください(以前にコピーを作成しましたよね?)

ファイルを保存します。おそらくこれで完了です。

2
cjonas