SSRS 中错误处理的标准或最佳实践

JNK*_*JNK 7 sql-server ssrs ssrs-2008-r2 ssrs-2016

我在 SSRS 中遇到了一个反复出现的问题,其中“坏”报告会发送给客户。问题是我们的报告包含多个子报告,并且一个或多个子报告将无法处理。当子报告无法处理时,报告会发送错误消息代替子报告并且没有实际数据。

我的问题是,如果子报告失败有没有办法阻止报告发送?

理想情况下,我希望外部报告只返回一个错误。有没有办法让 SSRS 报告中的错误状态升级到外部范围?是否有我们可以强制执行的编码标准可以防止这个问题?

我们目前同时使用 SSRS 2008r2 和 SSRS 2016。

Tom*_*m V 4

正如billinkc在他的评论中指出的那样,无法将子报告错误传播到主报告。

正如这篇MSDN 文章中所证明的,您可以尝试使用数据驱动的订阅来驱动订阅,但如果快速涉及任何复杂性,这可能会变得混乱。

如果您使用 SSRS 订阅查看服务器的 SQL 代理作业,您将看到一堆以 GUID 作为名称的 SQL 代理作业,您可以修改这些作业以包含在实际运行失败报告之前运行一些数据验证步骤的额外步骤发送报告之前的作业(存在作业定义被 SSRS 覆盖的风险)或在验证数据逻辑后从另一个作业调用作业。

您可以使用以下查询识别与报告关联的 GUID:

SELECT
            b.name AS JobName
            , e.name
            , e.path
            , d.description
            , a.SubscriptionID
            , laststatus
            , eventtype
            , LastRunTime
            , date_created
            , date_modified
    FROM ReportServer.dbo.ReportSchedule a JOIN msdb.dbo.sysjobs b
          ON a.ScheduleID = b.name
            JOIN ReportServer.dbo.ReportSchedule c
            ON b.name = c.ScheduleID
            JOIN ReportServer.dbo.Subscriptions d
            ON c.SubscriptionID = d.SubscriptionID
            JOIN ReportServer.dbo.Catalog e
            ON d.report_oid = e.itemid
    WHERE e.name = 'Sales_Report'
Run Code Online (Sandbox Code Playgroud)

(摘自这里

TL/DR:没有干净的解决方案,但您可以逃避一些黑客攻击,您需要在数据驱动的订阅中实现逻辑或创建额外的作业/修改生成的作业

PS:我没有测试任何这些方法