Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/reporting-services/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Stored procedures 如何确保存储过程在报表生成器3.0中构建数据集之前完成?_Stored Procedures_Reporting Services_Ssis_Reportbuilder - Fatal编程技术网

Stored procedures 如何确保存储过程在报表生成器3.0中构建数据集之前完成?

Stored procedures 如何确保存储过程在报表生成器3.0中构建数据集之前完成?,stored-procedures,reporting-services,ssis,reportbuilder,Stored Procedures,Reporting Services,Ssis,Reportbuilder,每次用户运行由report Builder 3.0构建的报表时,我都想使用SSIS包刷新一个表,因此我创建了一个SSIS作业,并从report Builder调用sp_start_job,作为调用此作业的存储过程 这一切都很好,但是报表在填充数据集之前不会等待作业完成(我可以判断,因为我的表中有一个“last refresh date”列) 有没有办法确保作业在数据加载到报表本身之前完成 Edit:因此我决定尝试调用该作业并在SELECT语句之前等待,如下所示: USE msdb; EXECU

每次用户运行由report Builder 3.0构建的报表时,我都想使用SSIS包刷新一个表,因此我创建了一个SSIS作业,并从report Builder调用
sp_start_job
,作为调用此作业的存储过程

这一切都很好,但是报表在填充数据集之前不会等待作业完成(我可以判断,因为我的表中有一个“last refresh date”列)

有没有办法确保作业在数据加载到报表本身之前完成

Edit:因此我决定尝试调用该作业并在
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秒应该足够了。。。有人知道为什么会发生这种情况吗


当我在ManagementStudio中运行查询时,返回的表显示了正确的时间戳,因此我认为这可能是报表生成器的问题(?)

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


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

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


在人们使用报表之前,是否没有办法执行ETL?

用户希望有一种方法可以从报表所基于的SharePoint列表中获取最新数据。由于报告的复杂性,而且我听说直接触摸SharePoint表不是一种好的做法,因此我决定最好的方法是将其导入到表中,并使用T-SQL魔术对数据进行处理。我不确定是否真的要轮询sys作业表,但出于好奇,在报表生成器中,您将如何实现这一点?我的假设是,启动代理作业的过程也会将数据返回给用户?基于这种假设,在执行msdb.dbo.sp_start_job somejob步骤和实际返回数据的select语句之间会有一个while循环。用户希望找到一种从报表所基于的SharePoint列表中获取最新数据的方法。由于报告的复杂性,而且我听说直接触摸SharePoint表不是一种好的做法,因此我决定最好的方法是将其导入到表中,并使用T-SQL魔术对数据进行处理。我不确定是否真的要轮询sys作业表,但出于好奇,在报表生成器中,您将如何实现这一点?我的假设是,启动代理作业的过程也会将数据返回给用户?基于这种假设,在
EXECUTE msdb.dbo.sp\u start\u job somejob
步骤和实际返回数据的select语句之间会有一个while循环。