【问题标题】:SSRS does not return all rows the stored procedure doesSSRS 不会返回存储过程执行的所有行
【发布时间】:2020-01-10 16:53:55
【问题描述】:

我创建了一个复杂的 SSRS 报告和一个存储过程,其中包含销售订单号、客户采购订单、订单状态、采购订单号的多个参数,然后是客户和供应商的选择。

在为几个特定的​​销售订单号运行报告时,不会返回所有行或根本没有行。当我为这些相同的销售订单号运行存储过程时,所有行都按预期显示。

我可以在 SSRS 中显示正确数据的唯一方法是使用供应商的参数选择。

参数如下:

PROCEDURE [dbo].[spMasterPipelineReport] 
    @SalesOrderNumber AS varchar(21),
    @CustomerPO AS varchar(21), 
    @Selection AS varchar(250), 
    @PurchaseOrderNumber AS varchar(21), 
    @Vendor AS varchar(MAX),  
    @Customer AS varchar(MAX)

查询中的where子句:

WHERE  
    (@SalesOrderNumber IS NULL OR SalesOrderNumber = @SalesOrderNumber)
    AND (@CustomerPO IS NULL OR CSTPONBR = @CustomerPO) 
    AND  Selection IN (SELECT * FROM dba_parseString_udf(@Selection, ',')) 
    AND (@PurchaseOrderNumber IS NULL OR PONUMBER = @PurchaseOrderNumber) 
    AND POVENDORID IN (SELECT * FROM dba_parseString_udf(@Vendor, ','))
    AND CUSTNMBR IN (SELECT * FROM dba_parseString_udf(@Customer, ','))

在 SSRS 中,销售订单号的参数设置为:

=IIF(Parameters!SalesOrderNumber.Value ="",Nothing,Parameters!SalesOrderNumber.Value)

我似乎无法确定需要更改哪些顺序才能显示所有相关行。

【问题讨论】:

  • 你在 Visual Studio 中运行吗?如果是这样,请确保您正在运行数据的缓存版本。 SSRS 项目将数据缓存到 report.data 文件中。只有当参数发生变化或点击绿色刷新错误时才会刷新真实数据。确保这不是您的问题。
  • 如果在VS中,也可以手动删除缓存数据,方法是删除项目文件夹下的.rdl.data报表文件。确保在不预览报告时执行此操作。
  • 您确定 SSRS 中的 Nothing 将 NULL 传递给数据库而不是空字符串吗?在查询之前,您始终可以在 SP 中“NULL out”空字符串参数,如下所示:IF @SalesOrderNumber = '' SET @SalesOrderNumber = NULL
  • 也许我看错了,但你是说你的SalesOrderNumber 参数是多值的,当你输入多个订单号时它不会返回所有行?您可能还需要在 where 子句中对该参数使用相同的 parseString 函数。
  • @RossBush 我不在 Visual Studio 中,但如果有必要,也许可以在 VS 中打开项目。

标签: sql-server reporting-services optional-parameters


【解决方案1】:

感谢大家的建议。调试存储过程导致我发现存储过程输出的实际值中有尾随空格,这些空格在运行时在 SSRS 中未传递给报告参数。在存储过程中,我将 RTRIM 添加到使用额外空格过滤结果的列中。这样做之后,报告在 SSRS 中使用正确的数据呈现。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-15
    • 1970-01-01
    • 1970-01-01
    • 2018-06-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多