在SQL Server Management Studio 2008中通过搜索所有存储过程来查找一个字符串

57
在SQL Server Management Studio中,有没有一种方法可以搜索所有存储过程中的字符串?
4个回答

97
SELECT *
FROM sys.sql_modules
WHERE definition LIKE '%yourstring%'

2
@gbn:谢谢,现在我在想是否应该在我的答案中添加sys.sql_modules是唯一一个将定义作为NVARCHAR(MAX)而不是NVARCHAR(4000)的视图。 - Lamak
18
为了获取存储过程的名称: SELECT p.name, m.* FROM sys.sql_modules m INNER JOIN sys.procedures p on m.object_id = p.object_id WHERE definition LIKE '%SEARCHSTRING%' - flash
3
获取名称而不使用JOIN的另一种方法是调用OBJECT_NAME:SELECT OBJECT_NAME(object_id), * FROM sys.sql_modules WHERE definition LIKE '%search%'从SQL Server 2008开始 - johnnyRose

24

可以看看 RedGate的SQL搜索。 这是一个管理工作室插件,并且可以免费下载。您可以在特定数据库或整个实例中进行搜索。


3
+1优秀的插件!而且最重要的是:它完全免费!! - marc_s
一个比代码选项好得多的解决方案 - 谢谢!! - Paolo Broccardo
在 SSMS 18.7.1 中仍然是一个可行的选项,所以给你点赞。 - DeanOC

21

我总是使用这个;

SELECT Name
 FROM sys.procedures
 WHERE OBJECT_DEFINITION(OBJECT_ID) LIKE '%SEARCHSTRING%'

3

在我的情况下,当我搜索特定文本或关键字时,我想获取模式和存储过程的名称。我使用的代码对我有效,如下:

USE [your_DB_name];
GO
SELECT [Scehma]=schema_name(o.schema_id), o.Name 
FROM sys.sql_modules m
 INNER JOIN sys.objects o
ON o.object_id = m.object_id
WHERE m.definition like '%your keyword%'
GO

结果很简单,如下所示:
----------------------------------------------
|    Schema    |    Name                     |
----------------------------------------------
|    dbo       |  stored_procedure_name      |
----------------------------------------------
...
and so on (if the keyword exists in more than one stored procedure)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接