0

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

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

4

3 回答 3

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%'  

----方案二

SELECT DISTINCT o.name, o.xtype  
FROM syscomments c  
INNER JOIN sysobjects o ON c.id=o.id    
WHERE c.TEXT LIKE '%tablename%'
于 2012-07-21T14:28:12.763 回答
1

sql server 2005 及更高版本的一种方法

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

您需要在 _ 周围使用 [],因为在进行通配符搜索时 _ 表示任何字符

于 2012-07-21T13:19:27.307 回答
0

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

SELECT ROUTINE_NAME, ROUTINE_DEFINITION 
    FROM INFORMATION_SCHEMA.ROUTINES 
    WHERE ROUTINE_DEFINITION LIKE '%foobar%' 
    AND ROUTINE_TYPE='PROCEDURE'
于 2012-07-21T13:17:17.657 回答