每次用户运行使用Report Builder 3.0构建的报表时,我都希望使用SSIS包刷新表,因此我创建了一个SSIS作业,并将报表生成器中的sp_start_job
作为存储过程调用调用这份工作。
这一切都运行正常,但是报告不会在填充数据集之前等待作业完成(我可以告诉因为我的表中有“最后刷新日期”列。)
在将数据加载到报表本身之前,有没有办法确保作业完成?
编辑:所以我决定尝试调用这个工作并在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中运行查询时,返回的表显示正确的时间戳,所以我认为它可能是报表生成器问题(?)
答案 0 :(得分:1)
这是可以预期的。启动作业是异步调用,因此一旦启动,控制权将返回给调用者。然后,您需要开始轮询sys作业表以查看作业当前是否正在执行。您可以在同一个proc调用中执行此操作,一旦作业达到终端状态(已完成,失败),您就可以将数据集返回给用户。那会回答你的问题,但善良,可能会变得难看。
在使用报告的人之前,是否无法执行ETL?