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

时间:2017-07-27 15:58:36

标签: sql database reporting-services

我在SSRS中创建了一个包含大量数据源的报告。

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

当发生这种情况时,整个报告拒绝运行,抛出错误"数据集的查询执行失败' DatasetName' (rsErrorExecutingCommand) 用户' UserName'无法访问' 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指出我正确的方向。

1 个答案:

答案 0 :(得分:2)

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

BEGIN TRY
    SELECT * FROM dbo.DetachedDB
END TRY

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

然后在您的SSRS报告中,如果数据集的行数为零,则切换表的可见性,并显示可以设置为显示的错误消息。