我试图找出哪些存储过程包含一段文本(有点像 MS SQL 的 Grep)。这样我就可以找到一个表的名称并替换它。
例如,如果我希望在我的数据库中查找哪些存储过程包含表名“clients_users”
我试图找出哪些存储过程包含一段文本(有点像 MS SQL 的 Grep)。这样我就可以找到一个表的名称并替换它。
例如,如果我希望在我的数据库中查找哪些存储过程包含表名“clients_users”
以下代码将有助于查找与一个或多个特定表相关的所有存储过程 (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%'
sql server 2005 及更高版本的一种方法
SELECT NAME
FROM sys.procedures
WHERE OBJECT_DEFINITION(object_id) LIKE '%clients[_]users%'
您需要在 _ 周围使用 [],因为在进行通配符搜索时 _ 表示任何字符
执行以下查询将产生所需的结果。将 foobar 替换为您需要在存储过程中找到的文本。
SELECT ROUTINE_NAME, ROUTINE_DEFINITION
FROM INFORMATION_SCHEMA.ROUTINES
WHERE ROUTINE_DEFINITION LIKE '%foobar%'
AND ROUTINE_TYPE='PROCEDURE'