Как удалить все отпечатки в хранимых процедурах / триггерах? - PullRequest
0 голосов
/ 01 апреля 2019

У меня есть несколько баз данных с множеством триггеров, хранимых процедур и т. Д., Которые содержат PRINT операторов.

Как только тесты будут завершены, я хочу удалить все эти PRINT операторы, которые я использовал для отладки.

Проблема в том, что мне нужно проверять объект за объектом во всех базах данных, чтобы найти и удалить строку, содержащую оператор PRINT. Это нежизнеспособно из-за количества существующих объектов.

Поэтому я ищу способ достичь этого без необходимости проверять объект за объектом.

1 Ответ

5 голосов
/ 01 апреля 2019

Вы можете сделать это, присоединившись к системному каталогу sys.sql_modules и sys.objects как

SELECT SCHEMA_NAME(O.schema_id) [Schema], 
       O.Name ObjectName,
       O.Type ObjectType
FROM sys.sql_modules M
INNER JOIN sys.objects O
ON O.object_id = M.object_id
WHERE M.definition LIKE '%PRINT%'

Посмотрите, как это работает с этим Live Demo

И если вы хотите вернуть определение, вы можете просто добавить в свой столбец definitionSELECT оператор как

SELECT SCHEMA_NAME(O.schema_id) [Schema], 
       O.Name ObjectName,
       O.Type ObjectType,
       M.definition
FROM sys.sql_modules M
INNER JOIN sys.objects O
ON O.object_id = M.object_id
WHERE M.definition LIKE '%PRINT%'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...