пятница, 24 апреля 2009 г.

MSSQL: Поиск по текстам хранимых процедур

При написании программы-репликатора mssql-to-postgresql, столкнулся с необходимостью найти все хранимые процедуры, где используется какая-либо таблица.
Решение:

SELECT ROUTINE_NAME, ROUTINE_DEFINITION
FROM INFORMATION_SCHEMA.ROUTINES
WHERE ROUTINE_DEFINITION LIKE '%искомый текст%'
AND ROUTINE_TYPE='PROCEDURE'

4 комментария:

Unknown комментирует...

Большое спасибо! Уже пригодилось.

Unknown комментирует...

Да, спасибо, супер :)

Serg комментирует...
Этот комментарий был удален автором.
Serg комментирует...

Не совсем супер.
Там весь результат - nvarchar(4000), остальное - просто обрезается.
Т.е. - недостоверно.
Для полной достоверности - нужно использовать:
sp_helptext '';

например, в таком контексте:

declare @t table (SPText varchar(1000));
insert @t
exec sp_helptext '';

и дальше - можно анализировать по таблице, можно слепить 1 строку, и анализировать ее, - по вкусу.