2

SQL Server データベースに呼び出し行 (Excel ファイル) をインポートするために、SSIS プロジェクトに取り組んでいます。

ここに私のデータフローがあります:

ここに画像の説明を入力

インポート処理の前に行をチェックするために、いくつかのルックアップを追加しました。最初の行は、行が既に存在するかどうかをチェックします (ユーザーが指定したフォルダーにインポート ファイルをドラッグ アンド ドロップするため、重複を防ぐために作成されました)。次に、他のルックアップが外部キー制約をチェックします。さらに、一致しない行はすべて別のデータベースにリダイレクトされます。そのため、無効な行をチェックでき、インポート中に NoMatchingRowsCall テーブルが変更されたかどうかを監査パッケージが知らせてくれます。

ここで、一致しない行に「エラーメッセージ」を追加して、「この行の問題は何ですか?」を確認したいと思います。エラーメッセージを追加するために、各ルックアップ(一致する出力なし)の後に「派生列」を追加すると思います。その方法はどうですか?「派生列」にテキストコンテンツを追加する方法は?パッケージ変数を使用する必要がありますか?

ここに私が取得したいものがあります:

ID | C1 | C2 | C3 | ERROR_MESSAGE
1  | .. | .. | .. | Row already exists
2  | .. | .. | .. | FK error for column C1
3  | .. | .. | .. | FK error for column C2
...

パッケージの実行を停止せずに失敗した行を追跡し、必要に応じて失敗したキーを変更して失敗した行を手動で挿入できるようにする「ソフト」ソリューションが必要です。

4

1 に答える 1

1

各 No Match 出力に対して派生 Error_Message 列を追加すると、探しているものが得られます。現在の設計では、ストリームごとに 1 つの派生列コンポーネントがあるため、各派生列に対してエラー メッセージを入力するだけで済みます。他の場所で値を再利用する場合や、すべてのメッセージを一元化する場合を除き、変数を追加する必要はありません。

ただし、いくつかの警告...

  1. ルックアップは、行ごとのクエリを実行するため、本質的にコストがかかります。少数の行/小さなテーブルのみを扱っている場合は問題ないかもしれませんが、何百万もの行を見ている場合は、すぐにボトルネックにぶつかります. これを回避する 1 つの方法は、データを一時的にデータベースに入れ、セット全体のチェックを実行することです (たとえば、左結合を使用して、関連する y 行を持たないすべての x を選択します)。このようにして、SQLに脚の作業をバッチで実行させます。これにより、より高速になります
  2. 現在のデザインでは、最初の問題のみが強調されます。「従業員がいない問題」を解決すると、同じ行で日付が一致しない場合があります。理想的には、すべての問題についてすべての行を検証し (重複する行を除く)、解決すべき問題の完全なセットを取得する必要があります。検証に SQL を使用することに切り替える場合は、問題の種類ごとにビット フラグ列を追加するか、すべての問題をカバーするビット単位のフラグを 1 列追加することができます。
于 2014-11-27T12:25:27.897 に答える