【问题标题】:in what stored procedure recieves multi-value parameter from ssrs?在什么存储过程中从 ssrs 接收多值参数?
【发布时间】:2020-07-21 11:51:21
【问题描述】:

所以我有存储过程和 ssrs 报告。
Ssrs 报告采用多值参数并将其发送到存储过程。
存储过程要求该参数为 varchar(50) 类型(最大长度约为 15 个字符)。
如果我在报告中选择 1 个值(因此不使用多选属性)它正在工作,但是当我选择超过 1 个值时它会报告:procedure or function ... has to many arguments specified.

SSMS存储过程以什么格式接收多值参数?它是像'a,b,c'这样的字符串吗?一张桌子?

我以后如何自己检查这样的事情(这个数据流以及数据是如何发送和接收的)?

【问题讨论】:

    标签: sql-server stored-procedures reporting-services


    【解决方案1】:

    SSRS 将多值参数作为分隔的(n)varchar 传递给存储过程。这意味着您需要在收到值后对其进行拆分。

    对于现代版本的 SQL Server,您只需使用 STRING_SPLIT

    CREATE PROC dbo.YourProc @SomeInt int, @MultiVal varchar(8000) AS
    BEGIN
    
        SELECT *
        FROM dbo.YourTable YT
             JOIN STRING_SPLIT(@MultiVal,',') SS ON YT.SomeCol = SS.[Value]
        WHERE YTIntCol = @SomeInt;
    
    END;
    

    对于旧版本,您需要使用不同的拆分器,例如内联表值函数、CLR 函数或 XML 拆分器。 Stack Overflow 上有 100 个这样的例子。

    【讨论】:

    • 所以它作为 (n)varchar 发送。行。我的情况有点复杂。我通过 ODBC 驱动程序从另一个 postgres 数据库获取数据,它是通过 OPENQUERY 完成的。它也被制作为存储过程,因为我使用动态参数进行 OPENQUERY。我无法理解的是,当我在 ssms 中对其进行测试时,我可以传递像 'a,b,c' 或 'a' 这样的字符串并且它可以工作,但是当我使用 ssrs 选择多值时会出错。
    • "当我使用 ssrs 选择多值时,我得到错误。" 如果你得到错误,为什么 您的问题中是否省略了该信息..?如果您再次使用OPENQUERY,为什么不详细说明?不要滴灌信息。
    • 您回答了我的第一个问题,对此我表示感谢。你能回答我的第二个问题吗?我如何才能看到 ssrs 和存储过程之间的数据交易的幕后情况?
    • “数据交易”和“幕后”是什么意思? SSRS 执行存储过程,SQL Server 将数据集传回。与在 SSMS 中执行存储过程没有什么不同。
    • 你是怎么知道的:SSRS 将多值参数作为分隔 (n)varchar 传递给存储过程?
    猜你喜欢
    • 2018-10-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-13
    • 1970-01-01
    • 2020-08-22
    相关资源
    最近更新 更多