我有一个sql查询,在ssms中运行大约需要15秒,但是当我在ssrs中运行它时,需要5-7分钟。从我读过的所有内容看来,这似乎是来自“参数嗅探”,所以我在查询中声明了变量来绕过这个,但是我仍然遇到了多个参数的问题。
使用:
我传入的参数是:@Places
create table #places (place varchar(50))
insert into #places select Val from dbo.parseValues(@Places,',')
select * from mytable m
inner join #places p on p.place = m.place
drop table #places
如果我在运行报表时只选择一个位置,则可以正常工作,否则会抛出错误消息:
有关此错误的详细信息,请导航到报表服务器 本地服务器计算机,或启用远程错误 ----------------------------数据集'dataset1'的查询执行失败。 (rsErrorExecutingCommand) ----------------------------报告处理期间发生错误。 (rsProcessingAborted)
ParseValues函数来自http://visakhm.blogspot.in/2010/02/parsing-delimited-string.html
有没有人有其他想法?
答案 0 :(得分:0)
正如我在评论中所补充的那样,'SSRS 2008`不会隐含地将多个值转换为字符串。因此,在将其传递给解析函数(接受逗号分隔的字符串)之前,需要将其转换为逗号分隔的字符串。很重要的是,这很容易。
在报告中创建隐藏参数(例如@StringPlaces
)。在“可用值”部分中,输入以下表达式:
=Join(Parameters!Places.Value, ",")
Join
函数准备以逗号分隔的字符串。现在您需要做的就是将这个新准备的参数传递给解析函数,该函数将其拆分为行。
parseValues(@StringPlaces,',')
让解析函数返回一个表,这样就不再需要临时表了。
注意从SQL Server 2012开始,您不需要将值集转换为字符串。引擎为你做到了。因此,如果您的代码在SQL 2012/2014上运行,那么它就像魅力一样。