You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何查询SQL Server Report Server Catalog中报表关联的数据集信息

SSRS指定文件夹下列出所有报表及关联数据集的操作方案

方案1:查询ReportServer元数据库(推荐,操作最快)

SSRS的所有报表、数据集元数据默认存储在部署时配置的ReportServer数据库中,直接运行SQL查询即可拿到所需数据:

  1. 先替换查询语句中的@TargetFolderPath参数值为你要查询的文件夹路径,格式示例:/业务报表/销售模块
  2. 在SSMS中连接到SSRS对应的SQL Server实例,运行如下查询:
-- 定义目标文件夹路径,开头需带/,结尾不要带/
DECLARE @TargetFolderPath NVARCHAR(260) = '/替换为你的目标文件夹路径';

-- 2016及以上版本SSRS用这个命名空间,2012及更早版本替换为 http://schemas.microsoft.com/sqlserver/reporting/2010/01/reportdefinition
WITH XMLNAMESPACES (DEFAULT 'http://schemas.microsoft.com/sqlserver/reporting/2016/01/reportdefinition')
SELECT
    c.Path AS 报表完整路径,
    c.Name AS 报表名称,
    ISNULL(dsref.value('(@SharedDataSetReference)[1]', 'NVARCHAR(260)'), '嵌入式数据集') AS 关联共享数据集路径
FROM
    [ReportServer].[dbo].[Catalog] c
CROSS APPLY
    c.Content.nodes('/Report/DataSets/DataSet/SharedDataSet') AS T(dsref)
WHERE
    c.Type = 2 -- Type=2对应报表类型的资源
    AND c.Path LIKE @TargetFolderPath + '/%' -- 仅筛选目标文件夹下的报表,删除该行可查全实例所有报表
ORDER BY
    c.Path;

返回结果说明:

  • 关联共享数据集路径显示为嵌入式数据集的条目,代表该数据集是写在报表内部的私有数据集,不是共享数据集
  • 对关联共享数据集路径列去重后,即可得到当前文件夹下所有正在被使用的共享数据集清单

方案2:调用SSRS原生API(适合自动化运维场景)

如果你需要把该能力集成到自研运维工具中,可以调用SSRS的ReportService2010 SOAP接口:

  • 先用ListChildren方法遍历指定文件夹下的所有Type=2的资源(即报表)
  • 再对每个报表调用GetItemReferences方法,参数指定引用类型为DataSet,即可拿到该报表关联的所有共享数据集

扩展:批量排查闲置共享数据集

如果要筛选出完全没有被使用的闲置共享数据集,可按以下步骤操作:

  • 运行上述查询,删除路径筛选条件,得到全实例所有报表用到的共享数据集清单,去重后得到「在用共享数据集列表」
  • 运行如下查询得到全实例所有已部署的共享数据集清单:
SELECT Path AS 共享数据集路径, Name AS 共享数据集名称
FROM [ReportServer].[dbo].[Catalog]
WHERE Type = 8 -- Type=8对应共享数据集类型
  • 两个清单做差集,得到的就是没有被任何报表引用的闲置共享数据集

注意事项

  • 运行SQL的账号需要拥有ReportServer数据库的只读权限
  • 不要直接修改ReportServer数据库的任何数据,仅做查询操作即可,避免SSRS运行异常

内容的提问来源于stack exchange,提问作者sirpadk

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 03:48:02