2017-07-27 6 views
1

多くのデータソースを持つSSRSで作成されたレポートがあります。SSRS - データベースが存在しない場合は無視

ごくまれに、これらのデータソースの1つが切り離されていることがあります。 SSASデータベースが大規模な仕事のためにメモリを解放するためにDevサーバー上で一時的に切り離されたので、これは最近起こったことです。それが起こった

、レポート全体がエラー「クエリの実行がデータセット 『DatasetName』(rsErrorExecutingCommand)のために失敗した投げ、実行することを拒否 どちらのユーザー、 『ユーザー名は』、 『DBNAME』データベースへのアクセス権を持っていません

データセット内のクエリまたはおそらくデータソースのクエリを修正する必要があります。これにより、クエリが失敗した場合(DBがダウン/デタッチされているため)、それでも他のすべてが実行されるようになります報告書に誤りがあるかもしれません。

[編集]

- ブッシェルからの支援により

が、これは私が使用して終了するものである:

1)常にアップする必要がありますSQL Serverの()に - 私は、SSASインスタンスへのリンクサーバーを

2)変更作成しましたSSASインスタンスの代わりにSQL Serverを指すようにSSRSのデータソースを設定します

3)このクエリを使用して(以下を参照)、SSASリンクサーバーが稼動していたかどうかを確認しました。それが動作している間は動作します!右に私を指しているためブッシェルへ (これを読んで、誰もが同じ方法を使用している場合、あなたは自分自身のクエリを使用して、私の「など...明確な選択」を交換する必要があると思います)

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ステートメントを使用して、潜在的に切り離されたDBからデータを引き出すことができます。試行が失敗した場合は、単純にデータを返しません。単に列見出しだけを返します。 – bushell

答えて

2

データセットを呼び出し可能なストアドプロシージャに移動し、TRY/CATCHブロックを使用して選択がエラーなしで実行されるかどうかを判断します。また、エラーが発生した場合は、列見出しと行が返されます。あなたのSSRSレポートに続いて

BEGIN TRY 
    SELECT * FROM dbo.DetachedDB 
END TRY 

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

データセットの行数がゼロの場合は、テーブルの表示を切り替え、代わりに表示するように設定することができ、エラーメッセージが表示されます。

+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

関連する問題