reportingservice 存储过程传递多值参数

在网上见有兄弟说过这么一句话:

增加一个“内部”参数,将其设置为级联参数(必须排列在上面提到的多值参数之后),如@InnerOrderIDs类型为String,可用值和默认值都设置为表达式如下:

=Join(Parameters!OrderID.Value,  ", ")

然后修改获取数据的SQL为 exec dbo.pGetOrders @InnerOrderIDs就大功告成!

 

这个方法我试了是可行的。但这只是第一步。

接下来看第二步:

 

为了接收这个多值参数,要创建一个表值函数,返回一个包含2列的表,主要用于解析多值参数并将其拆分(根据分隔符,号)。

CREATE FUNCTION [dbo].[StringToArrayTableForThree]
(
    @string nvarchar(100), @spliter nchar(1) = N','
)
RETURNS @arrayTable TABLE (
    [Index] int NULL,
    [Value] nvarchar(64)
)
AS
BEGIN
    DECLARE @i int ,@index int,@value nvarchar(64),@word nchar(1)
    SET @i= 1
    set @index = 1
    set @value = N''
     
 
    WHILE (@i <= LEN(@string))

    BEGIN
        SET @word = SUBSTRING(@string, @i, 1)
        IF (@word = @spliter)
        BEGIN
            INSERT INTO @arrayTable([Index], [Value]) VALUES(@index, @value)
            SET @value = N''
            SET @index = @index + 1
        END
        ELSE
        BEGIN
            SET @value = @value + @word
        END
 
        SET @i = @i + 1
    END
 
    INSERT INTO @arrayTable([Index], [Value]) VALUES(@index, @value)
 
    RETURN
END
GO

 

函数做完后,再看第三步:

 

第三步就是创建存储过程,在需要判断参数的地方使用刚才建的函数就行了,因为函数的返回值是table,所以要用子查询。

 

and vc_questionary_no in (SELECT  [Value] FROM dbo.StringToArrayTableForThree(@no, N',')

 

 

执行完上述3步后就可以执行报表展示数据了。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值