Поиск текста в хранимой процедуре в SQL Server
Я хочу выполнить поиск текста во всех хранимых процедурах своей базы данных. Я использую следующий SQL-запрос:
SELECT DISTINCT
o.name AS Object_Name,
o.type_desc
FROM sys.sql_modules m
INNER JOIN
sys.objects o
ON m.object_id = o.object_id
WHERE m.definition Like '%[ABD]%';
Я пытаюсь найти текст [ABD]
во всех хранимых процедурах, включая квадратные скобки, но запрос не возвращает корректные результаты. Как я могу изменить свой запрос, чтобы достичь этой цели?
5 ответ(ов)
Чтобы избежать обработки квадратных скобок как символов подстановки в SQL-запросе, вы можете использовать оператор ESCAPE. В вашем примере код будет выглядеть так:
WHERE m.definition LIKE '%\[ABD\]%' ESCAPE '\'
В этом случае квадратные скобки [
и ]
будут интерпретироваться как строковые литералы, а не как символы подстановки. Таким образом, вы успешно экранируете их, и SQL Server выполнит поиск именно зафиксированного текста, а не диапазона символов.
Попробуйте выполнить следующий запрос:
Запрос
SELECT name
FROM sys.procedures
WHERE Object_definition(object_id) LIKE '%strHell%'
Этот запрос вернет имена всех хранимых процедур в вашей базе данных, которые содержат строку "strHell" в их определениях. Убедитесь, что у вас есть необходимые права доступа для выполнения такого запроса на системные представления.
Вы можете использовать следующий запрос для достижения этой цели:
SELECT DISTINCT OBJECT_NAME(id)
FROM syscomments
WHERE text LIKE '%[ABD]%'
ORDER BY OBJECT_NAME(id);
Этот запрос возвращает уникальные имена объектов, в текстовой части которых содержатся буквы A, B или D. Мы используем оператор LIKE
для фильтрации текста и DISTINCT
для исключения дубликатов. Результаты сортируются по имени объекта.
Вы также можете использовать следующий запрос:
SELECT *
FROM INFORMATION_SCHEMA.ROUTINES
WHERE ROUTINE_DEFINITION LIKE '%Search_String%'
Этот запрос позволит вам найти все хранимые процедуры и функции в вашей базе данных, которые содержат указанную вами строку поиска (Search_String
) в своем определении.
Ваш запрос на SQL выбирает все процедуры из системного представления sys.procedures
, где в определении объекта содержится строка "High". Вот более подробное объяснение:
SELECT name, type_desc, create_date, modify_date
FROM sys.procedures
WHERE Object_definition(object_id) LIKE '%High%'
SELECT name, type_desc, create_date, modify_date
: здесь вы выбираете имя процедуры, тип описания, дату создания и дату изменения процедуры.FROM sys.procedures
: вы берете данные из системной таблицы, которая содержит информацию о всех хранимых процедурах в вашей базе данных.WHERE Object_definition(object_id) LIKE '%High%'
: данное условие фильтрует результаты, оставляя только те процедуры, определение которых содержит слово "High". Символы%
означают, что перед и после строки "High" может быть любое количество символов.
Если у вас возникнут дополнительные вопросы или понадобится помощь с оптимизацией запроса, не стесняйтесь спрашивать!
"Вставка результатов хранимой процедуры в временную таблицу"
Функция против Хранимой процедуры в SQL Server
Как конкатенировать текст из нескольких строк в одну строку в SQL Server
Обновление данных в одной таблице из другой на основе совпадения ID
Следует ли мне использовать != или <> для обозначения "не равно" в T-SQL?