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

SQL Server:如何显示存储过程等对象中含指定文本的行?

提取包含特定文本的具体代码行

嗨,我来帮你搞定这个需求!你当前的查询已经能精准定位到包含employee_project的存储过程、函数、触发器和视图,但要拿到具体出现该文本的代码行,可以试试下面的方案,完美兼容你在用的SQL Server 2008 R2和2016版本:

兼容SQL Server 2008 R2的通用方案

因为2008 R2没有内置的字符串拆分函数,我们可以借助XML来实现行拆分:

WITH SplitCodeLines AS (
    SELECT 
        so.name AS object_name,
        so.type_desc AS object_type,
        -- 处理不同换行格式(CRLF/LF),转换成XML节点后筛选目标行
        CAST('<lines><line>' + REPLACE(REPLACE(ssm.definition, CHAR(13), ''), CHAR(10), '</line><line>') + '</line></lines>' AS XML) AS code_xml
    FROM sys.objects so
    INNER JOIN sys.sql_modules ssm ON so.object_id = ssm.object_id
    WHERE ssm.definition LIKE '%employee_project%'
)
SELECT 
    object_name,
    object_type,
    line.value('.', 'NVARCHAR(MAX)') AS matched_line
FROM SplitCodeLines
CROSS APPLY code_xml.nodes('/lines/line[contains(text()[1], "employee_project")]') AS lines(line)

SQL Server 2016及以上简化方案

2016开始支持STRING_SPLIT函数,代码会更简洁:

SELECT 
    so.name AS object_name,
    so.type_desc AS object_type,
    value AS matched_line
FROM sys.objects so
INNER JOIN sys.sql_modules ssm ON so.object_id = ssm.object_id
-- 拆分代码为行,兼容CRLF和LF格式
CROSS APPLY STRING_SPLIT(REPLACE(ssm.definition, CHAR(13), ''), CHAR(10))
WHERE value LIKE '%employee_project%'

小提示

  • 两种方案都会返回包含employee_project的具体代码行,同时附带对象名称和类型(比如存储过程、视图等),方便你快速定位修改。
  • 如果代码里有特殊XML字符(比如<、>),可以在转换XML前用REPLACE转义,避免报错,比如加上REPLACE(ssm.definition, '&', '&amp;')这类处理。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:45:51