Ответ 1
Попробуйте следующее:
select * from sysobjects where id in
(select id from syscomments where text like '%exec%')
order by [name]
где "exec" - это текст, который вы ищете. Этот запрос также будет искать виды, просто fyi
Для хранимой процедуры у меня есть полный исходный код. Но имя этой хранимой процедуры было потеряно. В этой базе данных хранится сотни хранимых процедур.
Итак, есть способ, с помощью которого я могу узнать имя хранимой процедуры, используя его содержимое или используя любую из переменных в содержимом?
Это меня озадачивает много. Помощь будет искренне оценена.
Попробуйте следующее:
select * from sysobjects where id in
(select id from syscomments where text like '%exec%')
order by [name]
где "exec" - это текст, который вы ищете. Этот запрос также будет искать виды, просто fyi
Если тексты хранимых процедур не зашифрованы, 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%'