レポートIDを介してループコンテナを使用してSSIを使用して個別のCSVファイルを作成します

StackOverflow https://stackoverflow.com/questions/8360028

質問

SSISに関しては、私はまだ初心者だと言って、これを序文にしましょう。 Excelで作成され、ユーザーのリストに電子メールで作成される13のクエリがある現在のMSアクセスプロセスを置き換えようとしています。

私のSSISパッケージは、レポート名、電子メールDISTリスト、レポートデータ、CSVファイルを作成してから、それぞれの電子メールを送信する必要があります。

SQL Serverで以下を作成しました。

  1. レポート付きのテーブル - それぞれにReportIDがあります
  2. ユーザーのメールアドレスを備えたテーブル
  3. ユーザーを各レポートにリンクする結合テーブル
  4. ReportIDを渡すときに保存されたPROCを作成し、電子メールDISTリストと、メールを送信したときに使用するレポートの詳細を返します
  5. ReportIDを渡す保存されたProcを作成しました。その見返りに、私はそのレポートのいずれかの値を取得します。各レポートには、異なる列のデータを返す異なるクエリがあります。

また、以下を実行するSSISパッケージを作成しようとしました。

  1. を使用して Execute SQL Task アクティブなレポートIDのリストを取得します
  2. a Foreach Container Loop に設定 ADO Enumerator 各レポートIDをループします
  3. an Execute SQL Task これにより、各レポートIDのレポートの詳細と電子メールDISTリストを返します。

それから私はaを配置しようとしました Data Flow Task ループの内側と保存されたPROCを実行して、各レポートIDのレポートデータを返しますが、エラーメッセージが表示されています。

Error: SSIS Error Code DTS_E_OLEDBERROR.  An OLE DB error has occurred. 
Error code: 0x80040E55. An OLE DB record is available.  
Source: "Microsoft SQL Server Native Client 10.0"  Hresult: 0x80040E55  Description: "Column does not exist.". 

このエラーは、私の列が各レポートで同じではないためだと思います。その場合、進める方法について何か提案はありますか?

各レポートを通過するには、SSISパッケージでどのような手順を使用する必要がありますか?各レポートを実行するには、個別のSSISパッケージを作成する必要がありますか?

これを1つのパッケージで実行できる場合、生成するCSVレポートのそれぞれに対してフラットファイル接続マネージャーを作成する必要がありますか?

役に立ちましたか?

解決

あなたのアプローチは健全だと思います、あなたはステップ3で何か違うことをする必要があります sp_send_dbmail オプションかもしれません(SQLタスクを実行して呼び出します)。

#6クエリを@queryパラメーター(@query = "dbo.makeroport @reportid = 10 ')および @attach_query_result_as_file = 1に割り当てることができます。クエリの結果をCSVとしての受信者。

式を使用して、最初のクエリと出来上がりの結果に基づいて、CC、およびBCCを設定します。

他のヒント

レポートに異なる列がある場合、それぞれに異なるデータフローが必要になります。それでも同じforeachループでそれらを実行したい場合は、実行するときに入力される「ReportType」のような変数を持つようなことをすることができます Execute SQL Task. 。その後、そこにフローを正しいデータフローに向けることができます。次の画像は、条件付きフローの例を示しています。Conditional Data Flow

このチュートリアルでは、異なる目標を持っていますが、著者は条件付きフローを作成する方法について説明しています。 http://www.simple-talk.com/sql/ssis/xml-configuration-files-in-server-integration-services/

ここでは、変数に関する詳細情報をご覧ください。 http://sqlfool.com/2009/08/getting-started-with-variables-in-ssis/

残念ながら、SSISでは、データフローパイプラインのメタデータを設計時に設定する必要があるため、データフロータスクを使用する場合は、レポートごとに個別のタスクが必要になります。

データフローを使用しないことにより、各レポートの個別のデータフロータスクとファイル接続マネージャーを必要とすることができます。代わりに、メタデータを事前に定義する必要なく、BCP(バルクコピープログラム)を使用してファイルにデータをコピーできます。 BCPは、ストアドプロシージャの結果セットを取得し、ファイルにダンプするだけです。 ダスティン・ライアンは、Bidnでこれを行う方法に関する素晴らしい記事を持っています。 SSIでBCPを使用することが、変換が不要な場合、データフロータスクよりも優れた選択である可能性があり、これがその時の1つです。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top