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

如何通过SQL脚本查询SSRS服务器中RDL文件的报表及数据源信息

提取SSRS报表数据源信息的SQL方案

嘿,我来帮你搞定这个批量提取SSRS报表数据源信息的需求!针对你要找的报表名称、蓝色框的报表内数据源名称,还有绿色框的共享数据源引用,直接查ReportServer的系统表就能搞定,下面是具体的脚本和说明:

核心提取脚本

SELECT
    -- 报表名称
    c.Name AS ReportName,
    -- 报表里定义的数据源名称(就是你说的蓝色框内容)
    ds.Name AS ReportDataSourceName,
    -- 实际用的共享数据源引用(绿色框里的内容)
    CASE
        WHEN ds.LinkedItemID IS NOT NULL THEN 
            -- 共享数据源的话,拼出完整路径+名称,方便定位
            CONCAT('/', sc.Path, '/', sc.Name)
        ELSE
            -- 自定义数据源的话,显示连接字符串做区分
            '自定义数据源: ' + dsc.ConnectString
    END AS ActualDataSourceReference
FROM
    Catalog c
INNER JOIN
    DataSource ds ON c.ItemID = ds.ItemID
LEFT JOIN
    Catalog sc ON ds.LinkedItemID = sc.ItemID
LEFT JOIN
    DataSourceContents dsc ON ds.DataSourceID = dsc.DataSourceID
WHERE
    -- 只筛选报表类型(SSRS里Type=2代表报表)
    c.Type = 2
ORDER BY
    ReportName, ReportDataSourceName;

脚本细节说明

  • ReportName:直接取Catalog表里的报表名称,就是你服务器上显示的报表名。
  • ReportDataSourceName:对应DataSource表的Name字段,就是每个报表里自己定义的数据源名称(蓝色框的内容)。
  • ActualDataSourceReference:
    • 如果是共享数据源,会把该共享数据源的完整路径和名称拼出来,完全对应绿色框里的引用;
    • 如果是自定义数据源,会标注出来并显示连接字符串,避免和共享数据源混淆。

处理重复报表的辅助脚本

因为你提到有大量重复名称的报表要清理,这个脚本可以帮你快速定位重复项:

-- 找出所有名称重复的报表,以及它们的ID
SELECT
    ReportName,
    COUNT(*) AS 重复数量,
    STRING_AGG(ItemID, ', ') AS 报表ID列表
FROM (
    SELECT
        c.Name AS ReportName,
        c.ItemID
    FROM
        Catalog c
    WHERE
        c.Type = 2
) t
GROUP BY
    ReportName
HAVING
    COUNT(*) > 1
ORDER BY
    重复数量 DESC;

拿到这些重复报表的ID后,你可以结合上面的核心脚本,查看它们的数据源使用情况,判断哪些是冗余的可以删除的报表。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 06:36:46