如何批量查询135个SSRS报表的数据源?
通过SQL查询获取SSRS报表的数据源信息
当然可以直接查询SSRS的ReportServer数据库来批量获取报表对应的数据源,不需要逐个打开报表。以下是针对不同场景的查询语句:
1. 获取所有报表的数据源(含嵌入式+共享)
这个查询会区分报表使用的是嵌入式数据源还是共享数据源,并返回对应的关键信息:
SELECT c.Name AS ReportName, c.Path AS ReportPath, CASE WHEN ds.Type = 1 THEN 'Embedded' WHEN ds.Type = 2 THEN 'Shared' ELSE 'Unknown' END AS DataSourceType, -- 嵌入式数据源连接字符串(截断显示,避免敏感信息暴露) CASE WHEN ds.Type = 1 THEN LEFT(ds.ConnectionString, 50) + '...' ELSE NULL END AS EmbeddedConnectionString, -- 共享数据源的名称和路径 CASE WHEN ds.Type = 2 THEN sds.Name ELSE NULL END AS SharedDataSourceName, CASE WHEN ds.Type = 2 THEN sds.Path ELSE NULL END AS SharedDataSourcePath FROM Catalog c JOIN DataSource ds ON c.ItemID = ds.ItemID LEFT JOIN Catalog sds ON ds.Link = sds.ItemID WHERE c.Type = 2 -- Type=2 代表SSRS报表对象 ORDER BY c.Path, c.Name;
2. 仅查询使用共享数据源的报表
如果只关注关联了共享数据源的报表,可以用这个更精简的查询:
SELECT c.Name AS ReportName, c.Path AS ReportPath, sds.Name AS SharedDataSourceName, sds.Path AS SharedDataSourcePath FROM Catalog c JOIN DataSource ds ON c.ItemID = ds.ItemID JOIN Catalog sds ON ds.Link = sds.ItemID WHERE c.Type = 2 -- 报表 AND ds.Type = 2 -- 共享数据源 ORDER BY c.Path;
注意事项
- 执行这些查询需要拥有
ReportServer数据库的查询权限,通常由SSRS管理员分配 - 嵌入式数据源的连接字符串中,敏感信息(如密码)会被SSRS加密存储,查询结果中不会显示明文密码
- 如需过滤特定文件夹下的报表,可在
WHERE子句中添加AND c.Path LIKE '/目标报表文件夹/%'
内容的提问来源于stack exchange,提问作者Adrian Myk
相关产品推荐
相关产品推荐

