Reporting Services 多值参数处理

一、通过URL访问时多值参数的传递

    当需要通过URL访问报表时,并且需要传递多值参数值给报表时,需要把参数名称分开写。

    如有需要给报表多值参数WarehouseID传递值时,需要写成WarehouseID=196&WarehouseID=197&WarehouseID=198。

二、多值参数传递给存储过程的处理

    在存储过程接收参数时把参数数据类型设置为字符型,当存储过程接收Reporting Services传递过来的参数值时是用“,”分隔的字符串,可以通过函数来解析字符串,以便在存储过程中使用。

-- 解析成列表

CREATE FUNCTION [dbo].[UFN_StringToArrayTable]
(
    @string nvarchar(4000), @spliter nchar(1) = N','
)
RETURNS @arrayTable TABLE (
    [Index] int NULL,
    [Value] nvarchar(64)
)
AS
BEGIN
    DECLARE @i int = 1,
        @index int = 1,
        @value nvarchar(64) = N'',
        @word nchar(1)
 
    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

 

-- 数据处理存储过程

CREATE PROCEDURE USP_EWM_INV_GetSteelRealTimeInventoryAmount
(
    @warehouseID nvarchar(512)
)
AS
BEGIN
    SELECT
*
    FROM EWM_INV_RealTimeInventory
    WHERE WarehouseID IN
    (
        SELECT CONVERT(int, [Value], 0) FROM dbo.UFN_StringToArrayTable(@warehouseID, N',')
    )
END

在Reporting Services中使用时直接把@warehouseID的值对应为WarehouseID就行了。

posted on 2010-11-27 18:03  小石桥  阅读(739)  评论(0)    收藏  举报

导航