我试图找出哪些存储过程包含一段文本(有点像Grep for MS SQL)。这样我就可以找到一个表的名称并替换它。
例如,如果我希望找到我的数据库中的哪些存储过程包含表名“clients_users”
答案 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'