在 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), ','))