SSRS 报告查询不起作用,但在硬编码参数时起作用
SSRS Report Query Not Working, but does when hardcoded parameters
我有一个包含 3 个参数的 SSRS 报告:
@start (datetime)
@end (datetime)
@plantid (string from an external query)
当我运行定期报告时,它超时了。当我 运行 它在设计器查询生成器中时,它超时。但是,当我将参数硬编码到查询生成器中时,它就起作用了。
整个过程在 Management Studio 中运行良好
为什么当我在查询设计器中的查询中提供参数时,它 运行s,但当我通过报告填写参数时却没有?
这就是我在设计器查询生成器中放入的内容,以使其能够快速进行测试。
Declare @start varchar(20),
@end varchar(20),
@plantid varchar(10)
set @start='07/13/2015'
set @end = '07/17/2015'
set @plantid = 'mnp'
Select Division as 'Division', SUM(SALESQTY) as 'salesQTY',rtrim(Ltrim(salesline.itemgroupid)) as 'itemGroup'
FROM MiscReportTables.dbo.PlantDivisions
inner join prodtable on prodtable.dimension2_ = MiscReportTables.dbo.PlantDivisions.Division
inner join SalesLine on SalesLine.InventrefId = ProdTable.ProdiD
WHERE PlantID IN (@plantid)
and SCHEDDATE between @start and @end
Group By Division,salesLine.itemgroupid
编辑:
我把它变成了一个存储过程并 运行 对它进行了处理,即使在管理 studio.I 中也需要很长时间(60 分钟以上) studio.I 添加了 option (recompile)
以停止参数嗅探。
您是否尝试过将参数分配给查询中的其他变量?
我忘记了这个理论是什么,但这在以前的类似情况下对我有用。
Declare @start1 varchar(20),
@end1 varchar(20),
@plantid1 varchar(10)
set @start1 =@start
set @end1 = @end
set @plantid1 = @plantid
Select Division as 'Division', SUM(SALESQTY) as 'salesQTY',rtrim(Ltrim(salesline.itemgroupid)) as 'itemGroup'
FROM MiscReportTables.dbo.PlantDivisions
inner join prodtable on prodtable.dimension2_ = MiscReportTables.dbo.PlantDivisions.Division
inner join SalesLine on SalesLine.InventrefId = ProdTable.ProdiD
WHERE PlantID IN (@plantid)
and SCHEDDATE between @start and @end
Group By Division,salesLine.itemgroupid
要尝试的另一件事(如果有的话)是部署到报表服务器并从那里 运行 进行配置。有些报告在 Visual Studio 中需要很长时间,但在 RS 中 运行 很快。
我有一个类似的问题,使用了一种解决方法,即创建单独的参数,但是具有附加参数对于可用性来说是不可行的。因此,我随后将参数更改为具有默认值,这些默认值使用传入的日期中的值,这有效! (只需要隐藏第二组参数..)
我有一个包含 3 个参数的 SSRS 报告:
@start (datetime)
@end (datetime)
@plantid (string from an external query)
当我运行定期报告时,它超时了。当我 运行 它在设计器查询生成器中时,它超时。但是,当我将参数硬编码到查询生成器中时,它就起作用了。 整个过程在 Management Studio 中运行良好
为什么当我在查询设计器中的查询中提供参数时,它 运行s,但当我通过报告填写参数时却没有? 这就是我在设计器查询生成器中放入的内容,以使其能够快速进行测试。
Declare @start varchar(20),
@end varchar(20),
@plantid varchar(10)
set @start='07/13/2015'
set @end = '07/17/2015'
set @plantid = 'mnp'
Select Division as 'Division', SUM(SALESQTY) as 'salesQTY',rtrim(Ltrim(salesline.itemgroupid)) as 'itemGroup'
FROM MiscReportTables.dbo.PlantDivisions
inner join prodtable on prodtable.dimension2_ = MiscReportTables.dbo.PlantDivisions.Division
inner join SalesLine on SalesLine.InventrefId = ProdTable.ProdiD
WHERE PlantID IN (@plantid)
and SCHEDDATE between @start and @end
Group By Division,salesLine.itemgroupid
编辑:
我把它变成了一个存储过程并 运行 对它进行了处理,即使在管理 studio.I 中也需要很长时间(60 分钟以上) studio.I 添加了 option (recompile)
以停止参数嗅探。
您是否尝试过将参数分配给查询中的其他变量?
我忘记了这个理论是什么,但这在以前的类似情况下对我有用。
Declare @start1 varchar(20),
@end1 varchar(20),
@plantid1 varchar(10)
set @start1 =@start
set @end1 = @end
set @plantid1 = @plantid
Select Division as 'Division', SUM(SALESQTY) as 'salesQTY',rtrim(Ltrim(salesline.itemgroupid)) as 'itemGroup'
FROM MiscReportTables.dbo.PlantDivisions
inner join prodtable on prodtable.dimension2_ = MiscReportTables.dbo.PlantDivisions.Division
inner join SalesLine on SalesLine.InventrefId = ProdTable.ProdiD
WHERE PlantID IN (@plantid)
and SCHEDDATE between @start and @end
Group By Division,salesLine.itemgroupid
要尝试的另一件事(如果有的话)是部署到报表服务器并从那里 运行 进行配置。有些报告在 Visual Studio 中需要很长时间,但在 RS 中 运行 很快。
我有一个类似的问题,使用了一种解决方法,即创建单独的参数,但是具有附加参数对于可用性来说是不可行的。因此,我随后将参数更改为具有默认值,这些默认值使用传入的日期中的值,这有效! (只需要隐藏第二组参数..)