【问题标题】:Can "allow multiple values" for parameters be used with stored procedures in Report Builder 3.0?Report Builder 3.0 中的存储过程可以使用参数的“允许多个值”吗?
【发布时间】:2015-07-30 18:17:15
【问题描述】:

Microsoft 表示,在使用存储过程时,您不能在 Report Builder 2.0 中允许参数有多个值。 https://technet.microsoft.com/en-us/library/Dd207127(v=SQL.100).aspx

我找不到 Report Builder 3.0 的类似声明。 报表生成器如何将包含在具有多项选择的参数中的数据发送到存储过程? 从这篇文章看来,它将它们作为字符串传递,对吗? https://www.mssqltips.com/sqlservertip/2844/working-with-multiselect-parameters-for-ssrs-reports/

这种方法似乎太复杂了,无法解析报表生成器发送到数据库的字符串。

似乎可以将表作为参数传递到 SQL Server 2008 中的存储过程中: How to pass an array into a SQL Server stored procedure 有没有办法将表从 Report Builder 3.0 传递到 SQL Server 2008?

【问题讨论】:

    标签: sql-server stored-procedures reporting-services reportbuilder3.0


    【解决方案1】:

    是的,它可以使用。我发现最简单的方法是,构造你的存储过程,使得变量是 VARCHAR(MAX) 并且 where 子句使用一个包含。然后使用另一个 sproc 分解将要传递的逗号分隔变量。

    Example 
    @States = 'CA,NM,NY'
    
    Select *
    from Table 
    Where State in (Select CSVResults from parsecsv(@States,',')
    

    这当然假设您有一个名为 Parseccsv 的函数。如果你需要我用的。

    CREATE FUNCTION [dbo].[ParseCSV] (@CSV_STR VARCHAR(8000),@Delimiter varchar(20) )
     RETURNS @splittable TABLE (ID int identity(1,1), CSVvalues VARCHAR(256) )
    AS
    BEGIN  
    
    -- Check for NULL string or empty sting
        IF  (LEN(@CSV_STR) < 1 OR @CSV_STR IS NULL)
        BEGIN
            RETURN
        END
    
        ; WITH csvtbl(i,j)
        AS
        (
            SELECT i=1, j= CHARINDEX(@Delimiter,@CSV_STR+@Delimiter) 
    
            UNION ALL 
    
            SELECT i=j+1, j=CHARINDEX(@Delimiter,@CSV_STR+@Delimiter,j+1)
            FROM csvtbl
            WHERE CHARINDEX(@Delimiter,@CSV_STR+@Delimiter,j+1) <> 0
        )   
    
        INSERT  INTO @splittable  ( CSVvalues)
        SELECT  LTRIM(RTRIM(SUBSTRING(@CSV_STR,i,j-i)))
        FROM    csvtbl OPTION (MAXRECURSION 32767)
    
        RETURN
    END  
    

    【讨论】:

    • 谢谢。因此,报表生成器似乎将列表作为逗号分隔的字符串传递,您必须解析该字符串。您知道为什么当您将查询作为文本嵌入到报表中时,为什么不需要解析字段吗? (只是好奇。)
    • 不,我不知道,这只是 SSRS 的事情,抱歉
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-10
    相关资源
    最近更新 更多