我已经阅读了关于这个主题的无数帖子,但我似乎无法获得适用于我的特定情况的任何建议(这与其他人没有什么不同......)
我有一份SSRS报告。数据集1正在使用存储过程,并在where子句中有
and (@param is null or alias.column in
(select Item from dbo.ufnSplit(@param,',')))
我在这篇文章中借用了dbo.ufnSplit函数:https://stackoverflow.com/a/512300/22194
FUNCTION [dbo].[ufnSplit]
(@RepParam nvarchar(max), @Delim char(1)= ',')
RETURNS @Values TABLE (Item nvarchar(max))AS
--based on John Sansoms StackOverflow answer:
--https://stackoverflow.com/a/512300/22194
BEGIN
DECLARE @chrind INT
DECLARE @Piece nvarchar(100)
SELECT @chrind = 1
WHILE @chrind > 0
BEGIN
SELECT @chrind = CHARINDEX(@Delim,@RepParam)
IF @chrind > 0
SELECT @Piece = LEFT(@RepParam,@chrind - 1)
ELSE
SELECT @Piece = @RepParam
INSERT @Values(Item) VALUES(@Piece)
SELECT @RepParam = RIGHT(@RepParam,LEN(@RepParam) - @chrind)
IF LEN(@RepParam) = 0 BREAK
END
RETURN
END
在数据集2中,我得到了我想传递给数据集1的值
select distinct list from table
我的@param参数配置为查看数据集2的可用值
我的问题是,如果我从@param的参数下拉列表中选择一个值,则报告可以正常工作。如果我从下拉列表中选择多个值,我只返回所选第一个值的数据。
我在数据集2中的值不包含任何's
我是否因为未能提供足够的信息而错过任何内容?我很乐意接受批评,反馈,为此做点什么和不做,我一直在努力解决这个问题,而不是SQL专家:)
干杯, MD
更新因此,SQL事件探查器向我展示了这一点:
exec sp ... @ param = N'value1,value2,value3'
问题是: 1.每个价值都不应该用单引号括起来吗? 2.列表前的N是什么? 3.猜测需要裁掉尾随空间
答案 0 :(得分:0)
从参数下拉列表中选择多个值时,它们将存储在数组中。为了将其转换为可以传递给SQL的字符串,可以使用Join
函数。转到数据集属性,然后转到“参数”选项卡。用以下表达式替换参数值:
=Join(Parameters!param.Value, ",")
它应该是这样的:
现在你的split函数将获得一个逗号分隔的字符串,就像它应该的那样。我还建议在分离它们之后让分割功能从值中删除空格。
答案 1 :(得分:0)
所以我想出来并希望在此发布我的结果,希望它可以帮助其他人。
数据不佳。一个尾随空间炸毁了我的整个结果集,直到我经历了几个场景(选择了许多参数组合)之后我才注意到它。
我的结果集有尾随空格 - 一旦我对它进行了rtrim,我就不必在SSRS中进行任何花哨的连接/分割。