我已经查看了有关报告服务中多值选择的其他问题,但没有一个问题解决了我的问题 我的问题是这个。我有一个报告,其中包含参数查询 - @Type 选择不同(类型) 来自TypeTable 按类型排序
设置报告参数,报告在选择框中显示所有返回的结果(当前为3)。
我的存储过程具有以下子句:其中键入(@Type)。报告仅返回选择框中的第一项而不是全部三项。
请协助。
感谢!!!
答案 0 :(得分:1)
我不确定多选列表框返回的格式或数据类型,但是如果它是这样的:
X,Y,Z
你有两个选择(我更喜欢选项1):
选项1
您可以使用Arrays and Lists in SQL Server 2005- Using a Table of Numbers将其拆分。使用该代码,您可以将字符串拆分为一个表,每个值都在自己的行中。然后,您可以将该表连接到您的查询并根据多个@Type值进行过滤。
选项2
在存储过程中,您可以将查询动态地构建到字符串中。然后,您可以执行EXECUTE(@YourString)并运行该查询。你的字符串看起来像:
SET @ QUERY ='SELECT ... FROM ... WHERE ... IN('+ ISNULL(@Type,'')+')'
答案 1 :(得分:0)
我认为不可能做IN(@type)语句。
IN必须以逗号分隔,我不相信你可以将@Type作为“1,2,3”传递并使其有效。
也许您可以将@Type变量解析为临时表,然后在临时表上执行JOIN。这可能有点慢。
答案 2 :(得分:0)
我使用了以下表变量函数将列表拆分为一个可以在IN'd中加入的表。
ALTER FUNCTION [dbo].[Split] ( @List nvarchar(4000), @SplitOn nvarchar(5) ) 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