可“允许多个值”为参数与报表生成器3.0的存储过程中使用?(Can “allow multiple

2019-10-24 08:29发布

微软表示,使用存储过程时,你不能让Report Builder 2.0中的一个参数的多个值。 https://technet.microsoft.com/en-us/library/Dd207127(v=SQL.100).aspx

我无法找到一个类似的声明报表生成器3.0。 如何报表生成器发送包含在多项选择的参数存储过程中的数据? 看来在这个职位上它通过他们作为一个字符串,是这样吗? https://www.mssqltips.com/sqlservertip/2844/working-with-multiselect-parameters-for-ssrs-reports/

这似乎太复杂unparse由报表生成器发送到数据库的字符串的方法。

这似乎表可以作为参数在SQL Server 2008被传递到存储过程: 如何通过一个数组存储过程的SQL Server有没有办法从报表生成器3.0传递一个表到SQL Server 2008?

Answer 1:

是的,它可以使用。 我发现这样做是,stucture你的存储过程,这样的变量是VARCHAR(MAX),最简单的方法,并在where子句中使用的inclause。 然后使用另一个存储过程打破了将要传递的逗号分隔的变量。

Example 
@States = 'CA,NM,NY'

Select *
from Table 
Where State in (Select CSVResults from parsecsv(@States,',')

这是假设,当然你有一个叫做Parsecsv功能。 如果你需要一个我使用。

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  


文章来源: Can “allow multiple values” for parameters be used with stored procedures in Report Builder 3.0?