Подтвердить что ты не робот

Найти имя хранимой процедуры с ее содержимым в SQL Server 2000

Для хранимой процедуры у меня есть полный исходный код. Но имя этой хранимой процедуры было потеряно. В этой базе данных хранится сотни хранимых процедур.

Итак, есть способ, с помощью которого я могу узнать имя хранимой процедуры, используя его содержимое или используя любую из переменных в содержимом?

Это меня озадачивает много. Помощь будет искренне оценена.

4b9b3361

Ответ 1

Попробуйте следующее:

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

где "exec" - это текст, который вы ищете. Этот запрос также будет искать виды, просто fyi

Ответ 2

Если тексты хранимых процедур не зашифрованы, 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

Это, надеюсь, вернет только несколько процедур, которые вы можете проверить вручную.

Ответ 3

Существует другой подход, более читаемый и запоминающийся:

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

Это работает как минимум в sql 2008 и более новых версиях. Fuente

Ответ 4

Попробуйте этот запрос, он получит имя процедуры, которое содержит данное слово или поле

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

Ответ 5

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