2016-11-15 2 views
1

Вопрос: Есть ли где-нибудь на диске, где я могу найти человекочитаемые файлы для каждой процедуры/триггера в экземпляре базы данных?Где хранятся хранимые процедуры и другие объекты на диске?

Я просмотрел Program Files\Microsoft SQL Server\ на моем диске, но в основном это файлы .dll/.rll.

Причина, по которой я спрашиваю, заключается в том, что моя компания решила увеличить некое поле VARCHAR(10) до VARCHAR(50), и это поле появляется в 350+ хранимых процедурах/триггерах. И моя работа заключается в том, чтобы выяснить, какой из этих сценариев необходимо изменить, чтобы учесть это увеличение длины поля. Было бы здорово, если бы я мог просто написать сценарий для анализа этих файлов и определить те, которые соответствуют различным различным регулярным выражениям.

+3

В самой базе данных. Используйте 'syscomments' или' sys.sql_modules'. – shawnt00

ответ

3

as shawnt00 упомянутые хранимые процедуры [SP], функции, определения таблиц и т. Д. Хранятся непосредственно в файлах базы данных не с файловой системой. Но вы можете использовать системные представления для запроса к тексту SP или функции, чтобы попытаться найти столбец/переменную, которую вы ищете.

Единственным исключением является любой объект, который зашифрован, поскольку текстовое определение объекта не будет иметь четкий текст, а скорее будет зашифровано, поэтому оно не будет возвращено из такого запроса.

SELECT 
    SCHEMA_NAME(o.schema_id) as SchemaName 
    ,o.name AS ObjectName 
    ,o.type 
    ,o.type_desc 
    ,m.definition as ObjectText 
FROM 
    sys.sql_modules m 
    INNER JOIN sys.objects o 
    ON m.object_id = o.object_id 
WHERE 
    m.definition LIKE '%VARCHAR(10)%' 
+1

Да, я использовал 'sys.sql_modules' для определения 350+ интересующих скриптов, однако я не знал, что именно содержит столбец' definition'. Заглядывая в нее дальше, я понимаю сейчас. Я могу выполнить этот запрос из своего кода, а затем перебрать результаты и разобрать процедуры, представляющие интерес. Благодарю. – sab669

+0

yep удачи, 350+ звучит не очень весело, но было сделано так: – Matt