データベースから空のExcelファイルにデータをエクスポートするパッケージを作成しています。ソースコンポーネントと宛先コンポーネントのみを追加してパッケージを実行すると、出力列と列 "A"はUnicodeと非Unicodeの文字列データ型の間で変換できないという変換エラーが発生しました。
これを修正するために、データ変換コンポーネントを追加し、すべての列を
「Unicode文字列[DT_WSTR]」
エラーはもう発生しません。唯一の問題は、約50列あり、1つずつ移動して、ドロップダウンリストから[Unicode String [DT_WSTR]]を選択する必要があることです。次に、宛先コンポーネントに移動して、新しく変換された列をExcelファイルにマップする必要がありました。
私の質問は、他の誰かがこれに遭遇した場合、すべての手動のデータ型変換を行わなければならないより効率的な方法はありますか?すべての列を1つずつ変換してマップする必要があることは、特に行数が多い場合は現実的ではないようです。
Excelファイルはデータのインポートとエクスポートに最適な方法ではないことを理解していますが、これはこの特定のケースで必要なことです。
フラットテキストファイルにエクスポートして、パッケージの最後の手順としてExcelに変換する方法を探す場合があります。私はこれが同じユニコード/非ユニコード変換エラーを引き起こさないことを期待しています。
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
型であることを認識しますが、これは単に概念を示すためのものでした。
Data Conversion Component
_を使用して、「同じ」データの2つのコピーを割り当てて保存します。本来、それを行う方法はありません。ただし、Codeplexから- Replaceing Data Conversion Component for SSIS をダウンロードして、一発で実行できます。
詳細は here を参照してください。
「Unicode文字列(DT_WSTR)」から「文字列(DT_STR)」またはその逆に変更するだけの場合は、次のようにします。
文字列DTS:DataType
を検索し、その後に= "130"が続く場合、列はDT_WSTR(ユニコード)として定義されます。
= "129"が後に続く場合、列はDT_STR(非Unicode)として定義され、検索と置換に注意してください(以前にコピーを作成しましたよね?)
ファイルを保存します。おそらくこれで完了です。