2014-07-24 71 views
0

我在我的报告中有一个嵌入数据集,它将参数传入。数据集中的SSRS多值参数查询问题

这工作得很好单个选择使用等号(=)在我和线路 我会想到的和谷歌的结果似乎在说同样的,我可以只改变=登录到“IN”

FROM [database].[dbo].[itemTable] 
right Outer Join [database].[dbo].[CategoryTable] 
    on [database].[dbo].[itemTable].Category= [database].[dbo].[CategoryTable].Category And ([database].[dbo].[itemTable].Region = @pRegion) And ([database].[dbo].[itemTable].CategoryLN = @pCategoryLN) 
where [database].[dbo].[CategoryTable].Category != 'RETIRED' 

以上工作正常,但如果我改变

[database].[dbo].[itemTable].Region IN @pRegion' 

查询窗口说附近有语法错误@pRegion“。

回答

1

看起来你缺少的是括号围绕参数。

[database].[dbo].[itemTable].Region IN (@pRegion) 

另外请确保您不编辑/解析参数值。

+0

doh! :)感谢队友以及我很高兴这是我了解的一些事情! – user3641778

1

我们已经通过使用数据库表值函数解决了这个问题(可能是某个地方找到在互联网上,但我不记得在哪里)

CREATE FUNCTION [database].[dbo].[ParamSplit] 
    (
     @List nvarchar(max), -- string returned from multivalue report parameter 
     @SplitOn nvarchar(5) -- separator character 
    ) 
    RETURNS @RtnValue table 
    (

     Id int identity(1,1), 
     Value nvarchar(100) 
    ) 
    AS 
    BEGIN 
     While (Charindex(@SplitOn,@List)>0) 
     Begin 
     Insert Into @RtnValue (value) 
     Select Value = ltrim(rtrim(Substring(@List,1,Charindex(@SplitOn,@List)-1))) 
     Set @List = Substring(@List,Charindex(@SplitOn,@List)+len(@SplitOn),len(@List)) 
     End 

     Insert Into @RtnValue (Value) 
     Select Value = ltrim(rtrim(@List)) 
     Return 
    END 

然后你就可以在你的数据集查询使用。

where [database].[dbo].[itemTable].Region IN (Select [dbo].[ParamSplit].[Value] from [database].[dbo].[ParamSplit](@pRegion,','))