1

ユーザーが Report Builder 3.0 から作成されたレポートを実行するたびに、SSIS パッケージを使用してテーブルを更新したいので、SSIS ジョブを作成し、sp_start_jobこのジョブを呼び出すストアド プロシージャとして Report Builder から呼び出します。

これはすべて正常に機能しますが、レポートはデータセットにデータを入力する前にジョブが完了するのを待ちません (テーブルに「最終更新日」列があるのでわかります)。

データがレポート自体に読み込まれる前に、ジョブが確実に終了するようにする方法はありますか?

編集:だから私はジョブを呼び出して、次のSELECTようなステートメントの前に待機することにしました:

USE msdb;

EXECUTE dbo.sp_start_job N'CUBE - IS Inventory Report Refresh'

WAITFOR DELAY '00:00:25'

USE OtherDatabase;

SELECT  ...

しかし、タイムスタンプはまだ古い日付を示しています。SSIS ジョブは (履歴ログから) 17 秒で実行されるため、テーブルから選択する前に 25 秒待つだけで十分なはずです...なぜこれが起こっているのかについて洞察を持っている人はいますか?

Management Studio でクエリを実行すると、返されたテーブルに正しいタイムスタンプが表示されるので、レポート ビルダーの問題 (?) である可能性があると考えています。

4

1 に答える 1

1

そして、それは予想されることです。ジョブの開始は非同期呼び出しであるため、ジョブが開始されると、制御は呼び出し元に戻ります。次に、ジョブが現在実行されているかどうかを確認するために、sys ジョブ テーブルのポーリングを開始する必要があります。同じ proc 呼び出しでそれを行うことができ、ジョブが最終状態 (完了、失敗) になったら、データセットをユーザーに返すことができます。それはあなたの質問に答えるでしょうが、それは醜くなる可能性があります.

レポートを使用する前に ETL を実行する方法はありませんか?

于 2012-06-22T20:33:05.783 に答える