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

如何查询所有更新特定列(如Student.name)的存储过程?

查询包含修改Student.name操作的存储过程

可以通过查询系统视图sys.all_sql_modules来定位这类存储过程,该视图存储了所有用户定义模块(包括存储过程)的SQL定义文本。

基础查询语句

SELECT 
    sm.object_id,
    OBJECT_NAME(sm.object_id) AS procedure_name,
    sm.definition
FROM [eUniversityManagement].[sys].[all_sql_modules] sm
JOIN [eUniversityManagement].[sys].[objects] o 
    ON sm.object_id = o.object_id
WHERE 
    o.type = 'P' -- 仅筛选存储过程
    AND sm.definition LIKE '%UPDATE%Student%'
    AND sm.definition LIKE '%SET%Name =%'

关键说明

  • 关联sys.objects是为了精准定位存储过程(type = 'P'),避免误匹配视图、函数等其他数据库对象。
  • 两个LIKE条件分别匹配包含UPDATE Student的语句,以及对Name字段的赋值操作,以此锁定修改Student.name的逻辑。
  • 若表名带架构前缀(如dbo.Student),可将第一个LIKE条件调整为'%UPDATE%[dbo.]Student%';若字段名使用方括号(如[Name]),可将第二个条件改为'%SET%[Name] =%'。

兼容表别名的扩展查询

如果存储过程中使用表别名简化写法(如下例):

UPDATE s
SET s.Name = @NewName
FROM Student s
WHERE s.ID = @ID

可以用以下查询覆盖这类场景:

SELECT 
    sm.object_id,
    OBJECT_NAME(sm.object_id) AS procedure_name,
    sm.definition
FROM [eUniversityManagement].[sys].[all_sql_modules] sm
JOIN [eUniversityManagement].[sys].[objects] o 
    ON sm.object_id = o.object_id
WHERE 
    o.type = 'P'
    AND (
        -- 匹配直接UPDATE Student的情况
        (sm.definition LIKE '%UPDATE%Student%SET%Name =%')
        -- 匹配使用别名的情况
        OR (sm.definition LIKE '%UPDATE%[a-z]%SET%.Name =%' AND sm.definition LIKE '%FROM%Student%')
    )

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 09:10:25