Sql-Server
SSRS 中錯誤處理的標准或最佳實踐
我在 SSRS 中遇到了一個反復出現的問題,即“壞”報告會發送給客戶。問題是我們的報告包含多個子報告,而一個或多個子報告將無法處理。當子報表處理失敗時,報表會發送一條錯誤消息來代替子報表並且沒有實際數據。
我的問題是,如果子報告失敗,有沒有辦法阻止報告發送?
理想情況下,我希望外部報告只返回一個錯誤。有沒有辦法讓 SSRS 報告中的錯誤狀態升級到外部範圍?是否有我們可以強制執行的編碼標準來防止這個問題?
我們目前正在使用 SSRS 2008r2 和 SSRS 2016。
正如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'
(取自這裡)
TL/DR:沒有乾淨的解決方案,但您可以擺脫一些黑客攻擊,您需要在數據驅動的訂閱中實現邏輯或創建額外的作業/修改生成的作業
PS:我沒有測試任何這些方法