首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >SSRS中传递给SP的多个字符串值参数

SSRS中传递给SP的多个字符串值参数
EN

Stack Overflow用户
提问于 2015-08-25 06:51:06
回答 1查看 1.5K关注 0票数 2

我在这个论坛上读过和尝试过大部分相关的话题,但是大多数没有太多的反馈。

因此,我使用SSRS 2008 R2与报表生成器3。

我有一个简单的SP,如下所示,它使用IN过滤我的数据。

但出于某种原因,它没有将参数正确地传递给我的sp,而只通过我选择的第一个选项来筛选,希望您能提供帮助。

-SP

代码语言:javascript
运行
复制
@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

代码语言:javascript
运行
复制
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中的设置一样

代码语言:javascript
运行
复制
SELECT DISTINCT (Warehouse)
FROM [SysproCompanyR].[dbo].[InvWarehouse]

然后,在我的报告的Dataset中,我需要应用这个外观,我在参数选项中尝试了各种替代方案:

表达式

代码语言:javascript
运行
复制
=JOIN(Parameters!Warehouse.Value,",")

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-08-25 07:50:52

当从SSRS传递多个值时,它以逗号分隔的value1,value2,value3....发送值。

在查询中,您将在白字符串' '上进行拆分。

代码语言:javascript
运行
复制
Where Warehouse in (SELECT * FROM dba_parseString_udf((@Warehouse), ' '))

它应该使用逗号,而不是空白' '

代码语言:javascript
运行
复制
Where Warehouse in (SELECT * FROM dba_parseString_udf((@Warehouse), ','))
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32197294

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档