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

在SQL Server与Sybase中查找使用目标表的存储过程方法

查找SQL Server和Sybase中引用指定表的存储过程

SQL Server 操作方法

直接查询系统视图即可定位引用目标表的存储过程,以下是两种常用方案:

方案1:通过定义文本匹配

替换语句中的YourTableName为实际表名:

SELECT DISTINCT 
    o.name AS ProcedureName,
    o.type_desc AS ObjectType
FROM 
    sys.sql_modules m
JOIN 
    sys.objects o ON m.object_id = o.object_id
WHERE 
    m.definition LIKE '%YourTableName%'
    AND o.type IN ('P', 'PC') -- P=常规存储过程,PC=CLR存储过程
ORDER BY 
    ProcedureName;

方案2:通过依赖关系精准查询

此方法避免文本匹配的误判,需替换YourSchema.YourTableName为带架构的完整表名:

SELECT 
    referencing_schema_name + '.' + referencing_entity_name AS ProcedureName,
    referencing_class_desc AS ObjectType
FROM 
    sys.dm_sql_referencing_entities ('YourSchema.YourTableName', 'OBJECT')
WHERE 
    referencing_class = 1 -- 仅查询对象类型依赖
    AND referencing_class_desc = 'SQL_STORED_PROCEDURE'
ORDER BY 
    ProcedureName;

注意事项:

  • 若表名是SQL关键字,需用方括号包裹,比如[User]
  • 若存储过程是加密的,sys.sql_modules.definition会返回NULL,只能依赖系统视图的关系排查

Sybase ASE 操作方法

Sybase ASE依赖sysobjects和syscomments系统表查询,替换语句中的YourTableName为实际表名:

SELECT DISTINCT 
    o.name AS ProcedureName
FROM 
    sysobjects o
JOIN 
    syscomments c ON o.id = c.id
WHERE 
    c.text LIKE '%YourTableName%'
    AND o.type = 'P' -- 仅筛选存储过程
ORDER BY 
    ProcedureName;

注意事项:

  • Sybase中syscomments会将长存储过程拆分为多条记录,必须用DISTINCT去重
  • 同样,加密存储过程的text字段无法读取,这种情况需依赖数据库内置的依赖追踪工具或手动排查

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.03 09:12:31