【问题标题】:SSRS multi-value parameter issueSSRS多值参数问题
【发布时间】:2023-03-06 07:33:01
【问题描述】:

我有一个将这些值传递给存储过程的参数:

“加利福尼亚州、佛罗里达州、纽约州、新泽西州、马萨诸塞州、康涅狄格州、罗德岛州”。

我遇到的问题是,如果我选择“ALL”选项,它不会带回任何“CT”值。如果我单独选择它,它确实会带回“CT”。我注意到没有“MA”的记录,所以我不知道这是否与它有关。

我在 SQL 中使用逗号分隔的分隔符解析值。

另外,有谁知道如何在 SQL Server 中测试参数以查看它实际上是如何传递值的?

存储过程如下:

CREATE PROCEDURE plicense
(@division VARCHAR(500))
AS
SELECT a.lastname,
a.firstname,
b.divisionname
from Table A
INNER JOIN Table B
ON A.practid = B.practid
WHERE B.divisionname in (SELECT item from dbo.fnsplit(@division, ','))

SSRS 参数由如下所示的存储过程填充:

SELECT DISTINCT divisionid,
divisionname
FROM TABLE A
UNION
SELECT -1, 'N/A'    

【问题讨论】:

  • 在其上运行 sql profiler 以查看实际运行的查询。
  • 发布过程....
  • 多值参数生成这样的字符串。它们生成IN (a,b,c) 子句。当你写WHERE someID in @ids并指定@ids是一个多值参数时,SSRS会发送WHERE someID in (id1,id2,id3),其中id1等是用户选择的参数值
  • 还发布您的数据集定义 - 如何您如何调用存储过程?为什么您首先期望 CSV 列表?
  • 我更新了我的问题以包含代码。我不期待 CSV 列表。如果在 Division 参数中选择了 Select All 默认选项,则填充 SSRS 报告时不包括任何“CT”记录。存储过程在 SSRS 的数据集中被调用——我只是在数据集属性中填充存储过程名称。我有许多以相同方式构建的 SSRS 报告。这是我第一次遇到这个问题。

标签: sql-server ssrs-2008-r2


【解决方案1】:

问题出在 SSRS 中。我需要将它添加到主存储过程的参数部分:=join(Parameters!division.Value,",")。

【讨论】:

    【解决方案2】:

    创建一个函数将数据分隔为表格

    CREATE FUNCTION [dbo].[Split]
    (
        @List NVARCHAR(2000),
        @SplitOn NVARCHAR(5)
    )  
    RETURNS @RtnValue TABLE 
    (
    
        Id INT IDENTITY(1,1),
        Value NVARCHAR(100)
    ) 
    AS  
    BEGIN
    
    WHILE (CHARINDEX(@SplitOn,@List)>0)
    BEGIN 
    
    INSERT INTO @RtnValue (value)
    SELECT
        Value = LTRIM(RTRIM(SUBSTRING(@List,1,CHARINDEX(@SplitOn,@List)-1))) 
    
    
            SET @List = SUBSTRING(@List,CHARINDEX(@SplitOn,@List)+LEN(@SplitOn),LEN(@List))
    END
    
        INSERT INTO @RtnValue (Value)
        SELECT Value = LTRIM(RTRIM(@List))
    
        RETURN
    END
    

    在您的报告中,

    Where column in (select dbo.split (@param))
    

    【讨论】:

    • 在很久以前我也遇到过同样的问题,我用这个木槌设法解决了
    • 这不是 SSRS 多值参数的工作方式。它们生成单个字符串,它们用于生成IN (a,b,c) 子句。这也是拆分字符串最慢的方法之一
    • 再读一遍我的解释。
    • 我了解您发布的内容。正如我所说,这不是 SSRS 多值参数的工作方式。此外,OP 已经在使用拆分器功能。如果存储过程中存在错误,则不同的拆分器不会修复任何问题
    • 查看 Aaron Bertrands 的 Split strings the right way – or the next best way。使用WHILE 会导致非常糟糕的性能——它本质上是一个游标。使用 CTE 的等效方法通常很慢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多