【发布时间】:2012-12-25 00:24:29
【问题描述】:
对于存储过程,我有它的完整源代码。但是该存储过程的 name 已丢失。在这个数据库中,有数百个存储过程。
那么有没有一种方法可以通过使用存储过程的内容或使用内容中的任何变量来找出存储过程的名称?
这让我很困惑。非常感谢您的帮助。
【问题讨论】:
标签: sql stored-procedures sql-server-2000
对于存储过程,我有它的完整源代码。但是该存储过程的 name 已丢失。在这个数据库中,有数百个存储过程。
那么有没有一种方法可以通过使用存储过程的内容或使用内容中的任何变量来找出存储过程的名称?
这让我很困惑。非常感谢您的帮助。
【问题讨论】:
标签: sql stored-procedures sql-server-2000
试试这个:
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 和更新版本中有效。 Fuente
【讨论】:
试试这个查询,它会得到包含给定单词或字段的过程名称
SELECT Name
FROM sys.procedures
WHERE OBJECT_DEFINITION(object_id) LIKE '%Any-Field (OR) WORD%'
【讨论】:
select object_name(id) from syscomments where text like '%exec%'
【讨论】: