2016-03-24 2 views
0

SSISの新機能です。私はSSIS 2012を使用しています。入力ファイルはExcel、CSV、TXTです。SSIS 2012で切り捨てられたログの列

入力ファイルからデータベースにデータをダンプする必要があります。入力ファイルの列のサイズは変わっていくので、私は固定長に固執しません。パッケージ内の接続マネージャーのデータ型をntextに変更するとこれが解決されますが、パフォーマンスの制約もあります。したがって、顧客は余分なデータを切り捨てて、パフォーマンスに影響を与えるよりも彼を親密に扱う方が好きです。

行リダイレクトは、切り捨てられた行を与えます。しかし、私は、各ファイルの顧客が切り捨てられた列を親密にしたい。

SSISDBは、切り捨てられたデータを追跡しますか?もしそうなら、どのテーブル。

切り捨てられたデータを別々のファイルに書き込んで、スクリプトコンポーネントを使用して各列の長さを比較する予定です。良い方法がありますか?

+0

行リダイレクトがあなたに与えてくれないことを何をしたいのか分かりません。 「親密な顧客」とはどういう意味ですか? –

+0

@TabAlleman切り捨てられた各ファイルの列を追跡し、電子メールタスクを使用してそれらの列を送信します。 –

答えて

1

切り捨てられた行を(リダイレクトされた)表に書き出します。派生列を追加して、テーブルに書き込むリダイレクト入力と出力の間で、ソースファイルの名前(変数を保持するようにパッケージを取得する場合)を追加することができます。

各実行前にテーブルを切り捨てると、行数を変数に取得する簡単なExecuteSQL、Count> 0の場合は顧客に電子メールが送信されます。

+0

各ファイルで切り捨てられた列が必要です。 –

+0

エラー出力には、ErrorCodeおよびErrorColumnという列が自動的に含まれます。高度なエディタで列IDを検索すると、ErrorColumn値から列の名前を調べることができます。 – SebTHU

+0

SSISで、どの列が切り捨てられたかというエラーメッセージは見たことがありません。常に「データは切り捨てられる」としか言いようがありません。 –

1

私が知る限り、どの列が切り捨てられているかを自動的に追跡するものはSSISにはありません。

私はこれを処理するために考えることができる方法があり、スクリプトの変換でメインロジックが必要です。

これを行う必要がある場合は、残りのデータフローに渡す前に切り捨てられる列を「予測する」スクリプトコンポーネントを作成します。

LEFT()を使用して各文字列を必要な長さに切り捨てると、後でチェックして古い文字列と新しい文字列が同じかどうかを確認できます。

もしそうでなければ、トランケーションが発生したことを知っていて、送信電子メールタスクで使用する変数を設定できます。

または、最初に派生列を含む列を切り捨て、次にスクリプト変換を使用して古い列と新しい列を比較することができます。同じ論理。

+0

はい - 入力時のSSISのエラー処理はすべて非常にうまくできていますが、制限されています。データが非常に信頼できない場合は、入力時にデータ型に無関係(すべての列を長いDT_STR/ST_WSTRに設定)し、明示的な操作(SSIS、スクリプト化されたC#またはSQLのいずれか)で内部でデータをクリーンアップする方が簡単です。その包み。 – SebTHU

+0

@SebTHU私はあなたに従うことはありません。 SSISエラーハンドラの使用を提案しているようですか?それは私の意図ではなく、私が書き込んだものがそのように解釈できるかどうかはわかりません。 –

+0

はまったくありません。私はあなたの提案に同意しています。パッケージフローの中でこのようなことをする方が良いということです。 – SebTHU

関連する問題