2017-07-27 29 views
1

我在SSRS中創建了一個包含多個數據源的報告。SSRS - 忽略數據庫不存在

在極少數情況下,其中一個數據源可能已被分離。最近發生了這種情況,因爲SSAS數據庫暫時分離在開發服務器上以釋放大量工作的內存。 (rsErrorExecutingCommand) 用戶'UserName'不能訪問'DBName'數據庫,或者數據庫不存在

是否有修改數據集或數據源中的查詢,以便如果查詢失敗(因爲數據庫已關閉/分離),它仍然運行其他所有數據,但可能在報告中顯示錯誤。

[編輯]

從布舍爾援助 - 這就是我最終使用:

1)在SQL Server上(應該始終是向上) - 我創建了一個鏈接服務器的SSAS實例

2)改變我的SSRS數據源指向SQL Server而不是SSAS實例

3)使用此查詢(請參閱下文)檢查SSAS鏈接的服務器是否啓動 - 我無法使用SSAS進行測試,但它確實有效! (如果有人讀這是用同樣的方法,你只需要更換我的「SELECT DISTINCT ...等」用自己的查詢)

BEGIN TRY 
EXEC sp_testlinkedserver N'SSAS_LinkedServer'; 

EXEC sp_executesql N'SELECT * FROM OPENQUERY(SSAS_LinkedServer, 
     ''SELECT 
    DISTINCT 
     [CATALOG_NAME] as [Database], 
     [CUBE_NAME], 
     DIMENSION_CAPTION AS [Dimension], 
     DIMENSION_CARDINALITY AS [Count] 
    FROM $system.MDSchema_Dimensions 
     ORDER BY DIMENSION_CARDINALITY DESC;'');'; 
END TRY 

BEGIN CATCH 
SELECT 
     '' as [Database], 
     '' as [CUBE_NAME], 
     '' AS [Dimension], 
     '' AS [Count] 
END CATCH 

感謝布舍爾指着我在正確的方向。

+0

您可以在存儲過程中構建數據集,然後使用Try/Catch語句從可能分離的數據庫中提取數據。如果嘗試失敗,只需返回任何數據,或只是列標題。 – bushell

回答

2

我會將您的數據集移動到可調用的存儲過程中,然後使用TRY/CATCH塊來確定選擇是否運行沒有錯誤。而在出現錯誤的情況下,只需返回列標題並且沒有行。

BEGIN TRY 
    SELECT * FROM dbo.DetachedDB 
END TRY 

BEGIN CATCH 
    SELECT '' as [Column1], '' as [Column2]; etc.... 
END CATCH; 

然後在你的SSRS報告,如果數據集的行數都是零,切換臺的知名度,並給出了可以設置爲顯示而不是錯誤消息。

+1

感謝這個Bushell,我可能沒有時間在週末之前測試這個,但邏輯對我來說聽起來很合理,因此標記爲答案 - 不幸的是沒有足夠的代表upvote,但是非常感謝您的時間和幫助。 – Celador

+0

謝謝,我的例子過於簡化了,但是如果在存儲過程中正確實施,這個概念將起作用。昨晚我還在想這件事,下面的鏈接也可能會提供一個替代解決方案。 https://stackoverflow.com/questions/3104186/sql-server-is-there-an-if-exists-test-for-a-linked-server – bushell

+0

再次感謝,我編輯了我的原始問題,以顯示我最終使用 - 不幸的是,我無法使用SSAS進行測試 - 但我不明白爲什麼它不起作用! – Celador