首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >参数的“允许多个值”可以与ReportBuilder3.0中的存储过程一起使用吗?

参数的“允许多个值”可以与ReportBuilder3.0中的存储过程一起使用吗?
EN

Stack Overflow用户
提问于 2015-07-30 18:17:15
回答 1查看 1.3K关注 0票数 1

Microsoft表示,在使用存储过程时,不能允许报表生成器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/

对于解析报表生成器发送到数据库的字符串来说,这似乎太复杂了。

表似乎可以作为参数传递到Server 2008中的存储过程中:How to pass an array into a SQL Server stored procedure 是否有一种将表从报表生成器3.0传递到Server 2008的方法?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-07-30 18:29:05

是的可以用。我找到的最简单的方法是,构造sproc,这样变量就是VARCHAR(MAX),where子句使用in子句。然后使用另一个sproc来拆分将传递的逗号分隔变量。

代码语言:javascript
复制
Example 
@States = 'CA,NM,NY'

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

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

代码语言:javascript
复制
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  
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31731193

复制
相关文章

相似问题

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