0

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

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

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

  1. レポートを含むテーブル - それぞれに ReportId があります
  2. ユーザーのメールアドレスを含むテーブル
  3. ユーザーを各レポートにリンクする結合テーブル
  4. ReportId を渡すとストアド プロシージャが作成され、電子メール配信リストと、電子メールを送信するときに使用するレポートの詳細が返されます。
  5. ReportId を渡すストアド プロシージャを作成しました。代わりに、そのレポートの値を取得します。各レポートには、さまざまな列のデータを返すさまざまなクエリがあります。

また、次のことを行う SSIS パッケージの作成も試みました。

  1. を使用して、Execute SQL Taskアクティブなレポート ID のリストを取得します
  2. 各レポート ID をループするためのForeach Container LoopセットADO Enumerator
  3. レポートのExecute SQL Task詳細と各レポート ID の電子メール配信リストを返す .

次にData Flow Task、ループ内に配置し、ストアド プロシージャを実行して各レポート 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 レポートごとにフラット ファイル接続マネージャーを作成する必要がありますか?

4

3 に答える 3

1

あなたのアプローチは健全だと思います。ステップ 3 で何か違うことをする必要があるだけです 。

#6 クエリを @query パラメータ (@query = "EXECUTE dbo.MakeReport @reportid=10') および @attach_query_result_as_file=1 に割り当てることができます。データベース メールを有効にしていると仮定すると、クエリの結果を CSV として受信者に送信します。

式を使用して、最初のクエリの結果に基づいて to、cc、および bcc を設定します。

于 2011-12-02T20:14:12.217 に答える
0

レポートに異なる列がある場合は、列ごとに異なるデータ フローが必要になります。それでも同じ Foreach ループでそれらを実行したい場合は、Execute SQL Task. その後、フローを正しいデータフローに向けることができます。次の図は、条件付きフローの例を示しています。 条件付きデータ フロー

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

ここでは、変数に関する詳細情報を見つけることができます: http://sqlfool.com/2009/08/getting-started-with-variables-in-ssis/

于 2011-12-02T17:42:14.857 に答える
0

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

データ フローを使用しないことで、レポートごとに個別のデータ フロー タスクとファイル接続マネージャーが必要になることを回避できます。代わりに、メタデータを事前に定義しなくても、BCP (一括コピー プログラム) を使用してデータをファイルにコピーできます。BCP はストアド プロシージャの結果セットを取得し、それをファイルにダンプします。 ダスティン・ライアンは、BIDN でこれを行う方法について素晴らしい記事を書いています。変換が必要ない場合、データ フロー タスクよりも SSIS で BCP を使用する方が適切な場合がありますが、これはその 1 つです。

于 2011-12-02T17:50:29.027 に答える