在SQL Server 2000中查找存储过程名称及其内容

13

对于一个存储过程,我有它的全部源代码。但是这个存储过程的名称已经丢失了。在这个数据库中,有数百个存储过程。

那么是否有一种方法可以通过使用其内容或使用其中任何变量来找到存储过程的名称?

这让我感到困惑。真诚地感谢任何帮助。

5个回答

26

试试这个:

select * from sysobjects where id in 
(select id from syscomments where text like '%exec%')
order by [name]

这里的“exec”是你要搜索的文本。此查询还将搜索视图,仅供参考。


6
如果存储过程的文本未加密,则SQL Server会将存储过程的完整文本保存在syscomments表中,并使用id字段引用sysobjects表,实际名称存储在其中。因此,找到存储过程中不太可能出现在其他地方的代表性行,并执行以下操作:
select o.name, c.text 
from syscomments c
   inner join sysobjects o on o.id = c.id
where c.text like '%<representative_line>%'
  and o.type='P' -- this means filter procedures only

希望这样可以返回一些你可以手动检查的过程。


这也不错。但是不能选择多个“答案”。谢谢:) - Kings

2

还有一种更易读且更易记的方法:

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

这个方法至少在sql 2008及更高版本中有效。 Source


0

尝试使用此查询,它将获取包含给定单词或字段的过程名称

   SELECT Name 
        FROM sys.procedures 
        WHERE OBJECT_DEFINITION(object_id) LIKE '%Any-Field (OR) WORD%'

3
SQL 2000 上不存在 sys.procedures。 - BStateham
1
真的。提到的问题是针对SQL 2000的!! - Kings

0
select object_name(id) from syscomments where text like '%exec%'

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