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

SQL Server如何从数据库所有存储过程中查找指定插入值?

在SQL Server所有存储过程中查找指定表指定列的插入值

通过系统视图读取存储过程的完整定义,结合字符串匹配即可定位所有符合要求的插入逻辑和对应值。不要使用旧版syscomments视图,该视图会拆分超长存储过程文本导致匹配遗漏,推荐使用sys.sql_modules视图或OBJECT_DEFINITION函数读取完整定义。

可直接复用的查询脚本

以下脚本适配示例中查询[dbo].[Log]表[number]列插入值的场景,修改WHERE条件里的表名、列名即可适配其他查询需求:

SELECT
    SCHEMA_NAME(o.schema_id) AS 存储过程所属架构,
    OBJECT_NAME(sm.object_id) AS 存储过程名称,
    -- 截取VALUES后对应列的插入值
    LTRIM(RTRIM(SUBSTRING(
        sm.definition,
        val_start_pos,
        CHARINDEX(')', sm.definition, val_start_pos) - val_start_pos
    ))) AS 对应列插入值
FROM sys.sql_modules sm
INNER JOIN sys.objects o ON sm.object_id = o.object_id
CROSS APPLY (
    SELECT PATINDEX('%INSERT INTO%[Log]%([number])%VALUES%(%', sm.definition) + LEN('VALUES (') AS val_start_pos
) pos
WHERE
    o.type = 'P' -- 仅筛选存储过程对象
    AND sm.definition LIKE '%INSERT INTO%[Log]%([number])%VALUES%' -- 匹配目标表、目标列的插入逻辑
ORDER BY 存储过程名称

针对给出的3个测试存储过程,执行上述脚本将返回如下结果,和预期完全一致:

存储过程所属架构存储过程名称对应列插入值
dbosp_11
dbosp_22
dbosp_34

查询结果示例

使用注意事项

  • 如果存储过程使用WITH ENCRYPTION加密,上述方法无法读取存储过程定义,需要先完成解密才能查询
  • 上述脚本适配INSERT ... VALUES (常量)的写法,如果是INSERT ... SELECT、插入值为变量/函数表达式、多列插入、多行VALUES的场景,需要调整字符串截取的匹配规则
  • 匹配规则默认兼容换行、多余空格、表名/列名带方括号的写法,如果存在别名、schema省略等写法,需要对应调整LIKE匹配的模板

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.03 11:01:23