我的报告中有一个嵌入式数据集,我将参数传递给。
使用= Sign in my And line,这适用于单个选择 我想,谷歌的搜索结果似乎也是这样,我可以将=符号更改为'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'附近的语法不正确。
答案 0 :(得分: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,','))
答案 1 :(得分:1)
看起来你缺少的是参数周围的括号。
[database].[dbo].[itemTable].Region IN (@pRegion)
还要确保不编辑/解析参数值。