Поиск в ИП - PullRequest
       24

Поиск в ИП

2 голосов
/ 17 февраля 2009

У меня на самом деле есть 100-е SP в моей базе данных. Я должен найти набор из 10 SP, в котором есть особый комментарий. Есть ли поисковый запрос для этого.

Ответы [ 7 ]

3 голосов
/ 17 февраля 2009

Найдено эта статья, которая делает именно то, что вы после, если вы используете SQL Server

Я, безусловно, буду хранить копию этого кода для собственного использования:)

Кроме того, он работает не только для комментариев, но и для всего текста в SP.

Редактировать

Для простоты я включил копию кода, но вся заслуга принадлежит Ле Смиту

CREATE PROCEDURE Find_Text_In_SP
@StringToSearch varchar(100) 
AS 
   SET @StringToSearch = '%' +@StringToSearch + '%'
   SELECT Distinct SO.Name
   FROM sysobjects SO (NOLOCK)
   INNER JOIN syscomments SC (NOLOCK) on SO.Id = SC.ID
   AND SO.Type = 'P'
   AND SC.Text LIKE @stringtosearch
   ORDER BY SO.Name
GO
2 голосов
/ 17 февраля 2009

Обратите внимание, что методы поиска syscomments завершатся сбоем, если поиск строк охватывает границы записей в syscomments.

Чтобы быть на 100%, я думаю, вам придется выкинуть Sprocs из базы данных

Предложите рассмотреть вопрос о сохранении каждого Sproc в отдельном файле (и хранить в репозитории контроля версий и т. Д.), А не просто изменять их на месте в БД - и затем вы можете использовать свой любимый редактор для выполнения «Найти» (и «Заменить», если это уместно)

1 голос
/ 05 мая 2011

Нашел это в другом вопросе SO, кредиты переходят к первоначальному ответчику, gbn

SELECT 
    OBJECT_NAME(object_id)
FROM
    sys.sql_modules
WHERE
    definition LIKE '%' + 'WhatIWant' + '%'

Работает для объектов длиннее 4k

1 голос
/ 17 февраля 2009

Я не уверен, что это лучшее решение, но должно работать следующее (хотя оно может быть медленным):

  1. Откройте БД в SQL Server Management Studio.
  2. В обозревателе объектов щелкните правой кнопкой мыши БД, Задачи> Создать сценарии.
  3. Нажмите кнопку «Далее» 3 раза, пока не перейдете к шагу «Выбор типов объектов».
  4. Проверьте Хранимые процедуры и нажмите Далее.
  5. Нажмите «Выбрать все», чтобы выбрать все sp, или, если вы можете каким-либо образом ограничить sp, выберите только те, в которых вы хотите искать.
  6. Нажмите Готово, а затем Готово снова.
  7. Нажмите Закрыть.
  8. Теперь у вас должны быть все скрипты вашего sp, чтобы вы могли искать их.
1 голос
/ 17 февраля 2009

выберите OBJECT_NAME (id), * из системных комментариев ГДЕ текст LIKE 'WhwhatYouAreSearchingFor'

0 голосов
/ 17 февраля 2009

вы можете использовать информационную схему для этого:

select *
from information_schema.routines
where routine_definition like '%your comment to find%'

Имейте в виду, что это просматривает только первые 4096 символов (я полагаю ...) - чтобы искать больше символов, вы должны запросить базовые системные таблицы напрямую. Взгляните на определение представления information_schema.routines, чтобы увидеть, к каким системным таблицам оно обращается

Изменить: @ Рич ответит то, что вам нужно, если вам нужно запросить более 4096 символов

0 голосов
/ 17 февраля 2009

Я не помню точных имен таблиц, но было бы что-то вроде этого. Попробуйте.

SELECT sysobjects.name 
FROM syscomments, sysobjects 
WHERE syscomments.id=sysobjects.id
WHERE syscomments.TEXT LIKE ‘%particular comment%’
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...