对于存储过程,我有它的完整源代码。但是该存储过程的名称已经丢失。在这个数据库中,有数百个存储过程。
那么有没有一种方法可以通过使用存储过程的内容或使用内容中的任何变量来找出存储过程的名称?
这让我很困惑。真诚的帮助将不胜感激。
对于存储过程,我有它的完整源代码。但是该存储过程的名称已经丢失。在这个数据库中,有数百个存储过程。
那么有没有一种方法可以通过使用存储过程的内容或使用内容中的任何变量来找出存储过程的名称?
这让我很困惑。真诚的帮助将不胜感激。
尝试这个:
select * from sysobjects where id in
(select id from syscomments where text like '%exec%')
order by [name]
其中 'exec' 是您要搜索的文本。此查询也将搜索视图,仅供参考
如果存储过程的文本未加密,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
希望这应该只返回一些您可以手动检查的程序。
还有另一种方法,更具可读性和令人难忘:
SELECT ROUTINE_NAME, ROUTINE_DEFINITION
FROM INFORMATION_SCHEMA.ROUTINES
WHERE ROUTINE_DEFINITION LIKE '%AlgunaPalabraQueTeAcuerdes%'
AND ROUTINE_TYPE='PROCEDURE'
这至少在 sql 2008 和更新版本中有效。富恩特
select object_name(id) from syscomments where text like '%exec%'
试试这个查询,它会得到包含给定单词或字段的过程名称
SELECT Name
FROM sys.procedures
WHERE OBJECT_DEFINITION(object_id) LIKE '%Any-Field (OR) WORD%'