11

Поиск текста в хранимой процедуре в SQL Server

10

Я хочу выполнить поиск текста во всех хранимых процедурах своей базы данных. Я использую следующий 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 ответ(ов)

7

Чтобы избежать обработки квадратных скобок как символов подстановки в SQL-запросе, вы можете использовать оператор ESCAPE. В вашем примере код будет выглядеть так:

WHERE m.definition LIKE '%\[ABD\]%' ESCAPE '\'

В этом случае квадратные скобки [ и ] будут интерпретироваться как строковые литералы, а не как символы подстановки. Таким образом, вы успешно экранируете их, и SQL Server выполнит поиск именно зафиксированного текста, а не диапазона символов.

4

Попробуйте выполнить следующий запрос:

Запрос

SELECT name
FROM   sys.procedures
WHERE  Object_definition(object_id) LIKE '%strHell%'

Этот запрос вернет имена всех хранимых процедур в вашей базе данных, которые содержат строку "strHell" в их определениях. Убедитесь, что у вас есть необходимые права доступа для выполнения такого запроса на системные представления.

0

Вы можете использовать следующий запрос для достижения этой цели:

SELECT DISTINCT OBJECT_NAME(id) 
FROM syscomments 
WHERE text LIKE '%[ABD]%'
ORDER BY OBJECT_NAME(id);

Этот запрос возвращает уникальные имена объектов, в текстовой части которых содержатся буквы A, B или D. Мы используем оператор LIKE для фильтрации текста и DISTINCT для исключения дубликатов. Результаты сортируются по имени объекта.

0

Вы также можете использовать следующий запрос:

SELECT * 
FROM INFORMATION_SCHEMA.ROUTINES 
WHERE ROUTINE_DEFINITION LIKE '%Search_String%'

Этот запрос позволит вам найти все хранимые процедуры и функции в вашей базе данных, которые содержат указанную вами строку поиска (Search_String) в своем определении.

0

Ваш запрос на 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" может быть любое количество символов.

Если у вас возникнут дополнительные вопросы или понадобится помощь с оптимизацией запроса, не стесняйтесь спрашивать!

Чтобы ответить на вопрос, пожалуйста, войдите или зарегистрируйтесь