SSRS - 如果数据库不存在,则忽略



我在 SSRS 中创建了一个报表,其中包含许多数据源。

在极少数情况下,其中一个数据源可能已分离。 这是最近发生的,因为 SSAS 数据库在开发服务器上临时分离,以便为大型作业释放内存。

发生这种情况时,整个报告拒绝运行,抛出错误"数据集'DatasetName'的查询执行失败(rsErrorExecutingCommand( 用户"用户名"无权访问"DBName"数据库,或者数据库不存在。

无论如何,是否可以修改数据集或数据源中的查询,以便在查询失败(因为数据库关闭/分离(时,它仍然运行其他所有内容,但可能会在报表上显示错误。

[编辑]

在 Bushell 的帮助下 - 这就是我最终使用的:

1( 在 SQL Server 上(应该始终启动( - 我创建了一个到 SSAS 实例的链接服务器

2( 将 SSRS 中的数据源更改为指向 SQL Server 而不是 SSAS 实例

3( 使用此查询(见下文(检查 SSAS 链接服务器是否已启动 - 我无法在 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

感谢Bushell为我指出了正确的方向。

我会将您的数据集移动到可调用的存储过程中,然后使用 TRY/CATCH 块来确定选择是否运行没有错误。 在出现错误的情况下,只需返回列标题而不返回行。

BEGIN TRY
SELECT * FROM dbo.DetachedDB
END TRY
BEGIN CATCH
SELECT '' as [Column1], '' as [Column2]; etc....
END CATCH;

然后在 SSRS 报表中,如果数据集的行数为零,请切换表的可见性,并显示一条错误消息,可以将其设置为改为显示。

相关内容

最新更新