多值和存储过程

时间:2009-06-29 17:44:22

标签: sql-server stored-procedures

我已经查看了有关报告服务中多值选择的其他问题,但没有一个问题解决了我的问题 我的问题是这个。我有一个报告,其中包含参数查询 - @Type 选择不同(类型) 来自TypeTable 按类型排序

设置报告参数,报告在选择框中显示所有返回的结果(当前为3)。

我的存储过程具有以下子句:其中键入(@Type)。报告仅返回选择框中的第一项而不是全部三项。

请协助。

感谢!!!

3 个答案:

答案 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,'')+')'

请查看此链接The Curse and Blessings of Dynamic SQL

答案 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