在 SSRS 中传递给 SP 的多个字符串值参数
Multiple string values parameter passing to SP in SSRS
我已经阅读并尝试了本论坛上的大部分相关主题,但大多数都没有太多反馈。
所以我将 SSRS 2008 R2 与 Report Builder 3 一起使用。
我有一个简单的 SP,它使用 IN 过滤我的数据。
但由于某些原因,它没有将参数正确传递给我的 sp,并且仅通过第一个选项过滤 select,希望您能提供帮助。
--SP
@Warehouse varchar(max)
AS
BEGIN
SELECT WBal.Warehouse ,WBal.StockCode,((WBal.[Current] - WBal.Bal1)) CMov,((WBal.Bal1 - WBal.Bal2)) P1Mov,((WBal.Bal2 - WBal.Bal3)) P2Mov
,((WBal.Bal3 - WBal.Bal4)) P3Mov,((WBal.Bal4 - WBal.Bal5)) P4Mov,((WBal.Bal5 - WBal.Bal6)) P5Mov,((WBal.Bal6 - WBal.Bal7)) P6Mov
,((WBal.Bal7 - WBal.Bal8)) P7Mov,((WBal.Bal8 - WBal.Bal9)) P8Mov,((WBal.Bal9 - WBal.Bal10)) P9Mov,((WBal.Bal10 - WBal.Bal11)) P10Mov
,((WBal.Bal11 - WBal.Bal12)) P11Mov
FROM
(
SELECT [StockCode]
,[Warehouse]
,(QtyOnHand * UnitCost) [Current]
,(OpenBalCost1 * OpenBalQty1) Bal1
,(OpenBalCost2 * OpenBalQty2) Bal2
,(OpenBalCost3 * OpenBalQty3) Bal3
,(OpenBalCost4 * OpenBalQty4) Bal4
,(OpenBalCost5 * OpenBalQty5) Bal5
,(OpenBalCost6 * OpenBalQty6) Bal6
,(OpenBalCost7 * OpenBalQty7) Bal7
,(OpenBalCost8 * OpenBalQty8) Bal8
,(OpenBalCost9 * OpenBalQty9) Bal9
,(OpenBalCost10 * OpenBalQty10) Bal10
,(OpenBalCost11 * OpenBalQty11) Bal11
,(OpenBalCost12 * OpenBalQty12) Bal12
FROM [SysproCompanyR].[dbo].[InvWarehouse]
Where Warehouse in (SELECT * FROM dba_parseString_udf((@Warehouse), ' '))
) WBal
END
我有以下 udf 显然会拆分字符串,但我不太擅长这个所以我不知道我的问题是否出在 udf
UDF
ALTER FUNCTION [dbo].[dba_parseString_udf]
(
@stringToParse VARCHAR(8000)
, @delimiter CHAR(1)
)
RETURNS @parsedString TABLE (stringValue VARCHAR(128))
AS
/*********************************************************************************
Name: dba_parseString_udf
Author: Michelle Ufford, http://sqlfool.com
Purpose: This function parses string input using a variable delimiter.
Notes: Two common delimiter values are space (' ') and comma (',')
Date Initials Description
----------------------------------------------------------------------------
2011-05-20 MFU Initial Release
*********************************************************************************
Usage:
SELECT *
FROM dba_parseString_udf(<string>, <delimiter>);
Test Cases:
1. multiple strings separated by space
SELECT * FROM dbo.dba_parseString_udf(' aaa bbb ccc ', ' ');
2. multiple strings separated by comma
SELECT * FROM dbo.dba_parseString_udf(',aaa,bbb,,,ccc,', ',');
*********************************************************************************/
BEGIN
/* Declare variables */
DECLARE @trimmedString VARCHAR(8000);
/* We need to trim our string input in case the user entered extra spaces */
SET @trimmedString = LTRIM(RTRIM(@stringToParse));
/* Let's create a recursive CTE to break down our string for us */
WITH parseCTE (StartPos, EndPos)
AS
(
SELECT 1 AS StartPos
, CHARINDEX(@delimiter, @trimmedString + @delimiter) AS EndPos
UNION ALL
SELECT EndPos + 1 AS StartPos
, CharIndex(@delimiter, @trimmedString + @delimiter , EndPos + 1) AS EndPos
FROM parseCTE
WHERE CHARINDEX(@delimiter, @trimmedString + @delimiter, EndPos + 1) <> 0
)
/* Let's take the results and stick it in a table */
INSERT INTO @parsedString
SELECT SUBSTRING(@trimmedString, StartPos, EndPos - StartPos)
FROM parseCTE
WHERE LEN(LTRIM(RTRIM(SUBSTRING(@trimmedString, StartPos, EndPos - StartPos)))) > 0
OPTION (MaxRecursion 8000);
RETURN;
END
所以我想要实现的是,我有一个 sp 填充我的参数值,就像 ssrs 中的设置一样
SELECT DISTINCT (Warehouse)
FROM [SysproCompanyR].[dbo].[InvWarehouse]
然后在我的报告数据集中我需要应用此外观的地方我在参数选项中尝试了各种替代方案:
表达式
=JOIN(Parameters!Warehouse.Value,",")
当您从 SSRS 传递多个值时,它会以逗号分隔的形式发送值 value1,value2,value3....
在您的查询中,您正在拆分白色字符串 ' '
Where Warehouse in (SELECT * FROM dba_parseString_udf((@Warehouse), ' '))
应该用逗号,
代替白色space' '
Where Warehouse in (SELECT * FROM dba_parseString_udf((@Warehouse), ','))
我已经阅读并尝试了本论坛上的大部分相关主题,但大多数都没有太多反馈。
所以我将 SSRS 2008 R2 与 Report Builder 3 一起使用。
我有一个简单的 SP,它使用 IN 过滤我的数据。
但由于某些原因,它没有将参数正确传递给我的 sp,并且仅通过第一个选项过滤 select,希望您能提供帮助。
--SP
@Warehouse varchar(max)
AS
BEGIN
SELECT WBal.Warehouse ,WBal.StockCode,((WBal.[Current] - WBal.Bal1)) CMov,((WBal.Bal1 - WBal.Bal2)) P1Mov,((WBal.Bal2 - WBal.Bal3)) P2Mov
,((WBal.Bal3 - WBal.Bal4)) P3Mov,((WBal.Bal4 - WBal.Bal5)) P4Mov,((WBal.Bal5 - WBal.Bal6)) P5Mov,((WBal.Bal6 - WBal.Bal7)) P6Mov
,((WBal.Bal7 - WBal.Bal8)) P7Mov,((WBal.Bal8 - WBal.Bal9)) P8Mov,((WBal.Bal9 - WBal.Bal10)) P9Mov,((WBal.Bal10 - WBal.Bal11)) P10Mov
,((WBal.Bal11 - WBal.Bal12)) P11Mov
FROM
(
SELECT [StockCode]
,[Warehouse]
,(QtyOnHand * UnitCost) [Current]
,(OpenBalCost1 * OpenBalQty1) Bal1
,(OpenBalCost2 * OpenBalQty2) Bal2
,(OpenBalCost3 * OpenBalQty3) Bal3
,(OpenBalCost4 * OpenBalQty4) Bal4
,(OpenBalCost5 * OpenBalQty5) Bal5
,(OpenBalCost6 * OpenBalQty6) Bal6
,(OpenBalCost7 * OpenBalQty7) Bal7
,(OpenBalCost8 * OpenBalQty8) Bal8
,(OpenBalCost9 * OpenBalQty9) Bal9
,(OpenBalCost10 * OpenBalQty10) Bal10
,(OpenBalCost11 * OpenBalQty11) Bal11
,(OpenBalCost12 * OpenBalQty12) Bal12
FROM [SysproCompanyR].[dbo].[InvWarehouse]
Where Warehouse in (SELECT * FROM dba_parseString_udf((@Warehouse), ' '))
) WBal
END
我有以下 udf 显然会拆分字符串,但我不太擅长这个所以我不知道我的问题是否出在 udf
UDF
ALTER FUNCTION [dbo].[dba_parseString_udf]
(
@stringToParse VARCHAR(8000)
, @delimiter CHAR(1)
)
RETURNS @parsedString TABLE (stringValue VARCHAR(128))
AS
/*********************************************************************************
Name: dba_parseString_udf
Author: Michelle Ufford, http://sqlfool.com
Purpose: This function parses string input using a variable delimiter.
Notes: Two common delimiter values are space (' ') and comma (',')
Date Initials Description
----------------------------------------------------------------------------
2011-05-20 MFU Initial Release
*********************************************************************************
Usage:
SELECT *
FROM dba_parseString_udf(<string>, <delimiter>);
Test Cases:
1. multiple strings separated by space
SELECT * FROM dbo.dba_parseString_udf(' aaa bbb ccc ', ' ');
2. multiple strings separated by comma
SELECT * FROM dbo.dba_parseString_udf(',aaa,bbb,,,ccc,', ',');
*********************************************************************************/
BEGIN
/* Declare variables */
DECLARE @trimmedString VARCHAR(8000);
/* We need to trim our string input in case the user entered extra spaces */
SET @trimmedString = LTRIM(RTRIM(@stringToParse));
/* Let's create a recursive CTE to break down our string for us */
WITH parseCTE (StartPos, EndPos)
AS
(
SELECT 1 AS StartPos
, CHARINDEX(@delimiter, @trimmedString + @delimiter) AS EndPos
UNION ALL
SELECT EndPos + 1 AS StartPos
, CharIndex(@delimiter, @trimmedString + @delimiter , EndPos + 1) AS EndPos
FROM parseCTE
WHERE CHARINDEX(@delimiter, @trimmedString + @delimiter, EndPos + 1) <> 0
)
/* Let's take the results and stick it in a table */
INSERT INTO @parsedString
SELECT SUBSTRING(@trimmedString, StartPos, EndPos - StartPos)
FROM parseCTE
WHERE LEN(LTRIM(RTRIM(SUBSTRING(@trimmedString, StartPos, EndPos - StartPos)))) > 0
OPTION (MaxRecursion 8000);
RETURN;
END
所以我想要实现的是,我有一个 sp 填充我的参数值,就像 ssrs 中的设置一样
SELECT DISTINCT (Warehouse)
FROM [SysproCompanyR].[dbo].[InvWarehouse]
然后在我的报告数据集中我需要应用此外观的地方我在参数选项中尝试了各种替代方案:
表达式
=JOIN(Parameters!Warehouse.Value,",")
当您从 SSRS 传递多个值时,它会以逗号分隔的形式发送值 value1,value2,value3....
在您的查询中,您正在拆分白色字符串 ' '
Where Warehouse in (SELECT * FROM dba_parseString_udf((@Warehouse), ' '))
应该用逗号,
代替白色space' '
Where Warehouse in (SELECT * FROM dba_parseString_udf((@Warehouse), ','))