我在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指出我正确的方向。
答案 0 :(得分:2)
我会将您的数据集移动到可调用的存储过程,然后使用TRY / CATCH块来确定选择是否运行没有错误。并且在出现错误的情况下,只返回列标题而不是行。
BEGIN TRY
SELECT * FROM dbo.DetachedDB
END TRY
BEGIN CATCH
SELECT '' as [Column1], '' as [Column2]; etc....
END CATCH;
然后在您的SSRS报告中,如果数据集的行数为零,则切换表的可见性,并显示可以设置为显示的错误消息。