如何查找哪些存储过程包含一段文本

时间:2012-07-21 13:17:18

标签: sql-server tsql

我试图找出哪些存储过程包含一段文本(有点像Grep for MS SQL)。这样我就可以找到一个表的名称并替换它。

例如,如果我希望找到我的数据库中的哪些存储过程包含表名“clients_users”

3 个答案:

答案 0 :(得分:1)

sql server 2005及以上的一种方式

SELECT NAME
FROM sys.procedures
WHERE OBJECT_DEFINITION(object_id) LIKE '%clients[_]users%'

你需要[]围绕_,因为_表示进行外卡搜索时的任何字符

答案 1 :(得分:1)

以下代码将有助于查找与一个或多个特定表相关的所有存储过程(SP)。 sp_help和sp_depends并不总能返回准确的结果。

----选项1

SELECT DISTINCT so.name  
FROM syscomments sc  
INNER JOIN sysobjects so ON sc.id=so.id  
WHERE sc.TEXT LIKE '%tablename%'  

----选项2

SELECT DISTINCT o.name, o.xtype  
FROM syscomments c  
INNER JOIN sysobjects o ON c.id=o.id    
WHERE c.TEXT LIKE '%tablename%'

答案 2 :(得分:0)

执行以下查询将产生所需的结果。用您需要在存储过程中找到的文本替换foobar。

SELECT ROUTINE_NAME, ROUTINE_DEFINITION 
    FROM INFORMATION_SCHEMA.ROUTINES 
    WHERE ROUTINE_DEFINITION LIKE '%foobar%' 
    AND ROUTINE_TYPE='PROCEDURE'