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

SQL Server:如何获取存储过程引用的跨数据库表及列信息

跨数据库存储过程表/列引用获取方案

原脚本依赖的sys.sysdepends是SQL Server过时的系统视图,仅能捕获当前数据库内的对象依赖,无法识别跨数据库的引用(如DatabaseB.dbo.TableX这类写法)。以下是修改后的脚本及说明:

修改后脚本

USE DatabaseA;
GO

SELECT DISTINCT
    SCHEMA_NAME(o.schema_id) + '.' + o.name AS SP_Name,
    -- 拼接完整的引用对象标识(含数据库、架构)
    CASE 
        WHEN ed.referenced_database_name IS NOT NULL 
            THEN ed.referenced_database_name + '.' + ed.referenced_schema_name + '.' + ed.referenced_entity_name
        ELSE SCHEMA_NAME(ro.schema_id) + '.' + ro.name
    END AS Table_Name,
    c.name AS Field_Name
FROM 
    sys.objects o
JOIN 
    sys.sql_expression_dependencies ed ON o.object_id = ed.referencing_id
LEFT JOIN 
    sys.objects ro ON ed.referenced_id = ro.object_id
-- 跨库关联列信息,通过四部分对象ID匹配
LEFT JOIN 
    sys.columns c ON 
        CASE 
            WHEN ed.referenced_database_name IS NOT NULL 
                THEN OBJECT_ID(ed.referenced_database_name + '.' + ed.referenced_schema_name + '.' + ed.referenced_entity_name)
            ELSE ro.object_id
        END = c.object_id
        AND ed.referenced_minor_id = c.column_id
WHERE 
    o.type = 'P' -- 仅筛选存储过程
    AND ed.referenced_entity_name IS NOT NULL
    AND ed.referenced_class = 1 -- 仅捕获对象类型的引用(表、视图等)

关键修改说明

  • 替换依赖视图:用sys.sql_expression_dependencies替代sys.sysdepends,该视图支持捕获跨数据库、甚至跨服务器的对象引用,且依赖信息更准确。
  • 解析跨库标识:通过referenced_database_name、referenced_schema_name字段提取跨库引用的完整对象路径,避免仅显示表名导致的歧义。
  • 跨库列关联:利用OBJECT_ID()函数生成跨库表的对象ID,以此关联对应数据库的sys.columns视图,获取列名信息。
  • 精准筛选:通过referenced_class = 1确保只捕获表、视图这类对象的引用,排除其他类型的依赖(如函数、存储过程自身)。

补充注意事项

  • 若存储过程包含动态SQL生成的引用,sys.sql_expression_dependencies无法自动捕获,需使用sys.dm_sql_referenced_entities函数逐个解析存储过程,示例调用:
    SELECT referenced_entity_name, referenced_minor_name
    FROM sys.dm_sql_referenced_entities('DatabaseA.dbo.YourSP', 'OBJECT');
    
  • 执行脚本的账号需具备访问目标跨数据库的sys.objects、sys.columns视图的权限。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 22:42:49