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就行了。
浙公网安备 33010602011771号