13

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

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

这让我很困惑。真诚的帮助将不胜感激。

4

5 回答 5

26

尝试这个:

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

其中 'exec' 是您要搜索的文本。此查询也将搜索视图,仅供参考

于 2013-01-10T15:09:22.753 回答
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

希望这应该只返回一些您可以手动检查的程序。

于 2013-01-10T15:16:16.813 回答
2

还有另一种方法,更具可读性和令人难忘:

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

这至少在 sql 2008 和更新版本中有效。富恩特

于 2015-03-12T19:03:32.953 回答
0
select object_name(id) from syscomments where text like '%exec%'
于 2014-09-11T03:17:07.250 回答
0

试试这个查询,它会得到包含给定单词或字段的过程名称

   SELECT Name 
        FROM sys.procedures 
        WHERE OBJECT_DEFINITION(object_id) LIKE '%Any-Field (OR) WORD%'
于 2013-01-10T15:11:42.007 回答