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 中运行查询时,返回的表显示了正确的时间戳,所以我认为这可能是 Report Builder 问题(?)

4

1 回答 1

1

这是意料之中的。启动作业是一个异步调用,因此一旦启动,控制权就会返回给调用者。然后,您需要开始轮询 sys 作业表以查看作业当前是否正在执行。您可以在同一个 proc 调用中执行此操作,并且一旦作业达到终端状态(完成、失败),您就可以将数据集返回给用户。那会回答你的问题,但是天哪,这可能会变得丑陋。

在人们使用报告之前有没有办法执行 ETL?

于 2012-06-22T20:33:05.783 回答