我想从我所有的数据库存储过程中搜索一个文本。我使用下面的SQL:

SELECT DISTINCT
       o.name AS Object_Name,
       o.type_desc
FROM sys.sql_modules m
       INNER JOIN
       sys.objects o
         ON m.object_id = o.object_id
WHERE m.definition Like '%[ABD]%';

我想在包括方括号在内的所有存储过程中搜索[ABD],但它没有给出正确的结果。我如何改变我的查询来实现这一点?


当前回答

它可能对你有帮助!

SELECT DISTINCT 
      A.NAME AS OBJECT_NAME,
      A.TYPE_DESC
      FROM SYS.SQL_MODULES M 
      INNER JOIN SYS.OBJECTS A ON M.OBJECT_ID = A.OBJECT_ID
      WHERE M.DEFINITION LIKE '%['+@SEARCH_TEXT+']%'
      ORDER BY TYPE_DESC

其他回答

Redgate的SQL搜索是一个很好的工具,它是一个免费的SSMS插件。

SELECT name , type_desc , create_date , modify_date
FROM   sys.procedures 
WHERE  Object_definition(object_id) LIKE '%High%'

请把这作为一个“肮脏”的替代方案,但这挽救了我的落后很多次,特别是当我不熟悉DB项目。有时,你试图在所有sp中搜索一个字符串,却忘记了一些相关的逻辑可能隐藏在函数和触发器之间,或者它可能只是措辞与你想象的不同。

从您的MSSMS中,您可以右键单击您的DB并选择 生成脚本向导,将所有sp, Fns和触发器输出到单个.sql文件。

确保也选择了触发器!

然后只需使用Sublime或Notepad来搜索你需要找到的字符串。我知道这可能是非常低效和偏执的方法,但它有效:)

我通常执行以下命令来实现这一目标:

select distinct object_name(id) 
from syscomments 
where text like '%[ABD]%'
order by object_name(id) 
select top 10 * from
sys.procedures
where object_definition(object_id) like '%\[ABD\]%'