Новость из категории: Информация

SQL Server: как найти строку в любой хранимой процедуре. Продолжение

SQL Server: как найти строку в любой хранимой процедуре. Продолжение

Объединяем элементы

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

SQL Server: как найти строку в любой хранимой процедуре. Продолжение
Хранимая процедура для поиска хранимых процедур

В первую очередь обратите внимание, что я создаю эту хранимую процедуру в базе данных с именем iDBA. Каждому, кто знаком с моими статьями за несколько лет, известно, что я использую эту базу данных для всех административных сценариев. В вашей среде у нее может быть другое имя, но важно иметь базу данных, которая поможет не пропустить несистемные объекты в базу данных master, где ленивые программисты и администраторы баз данных, выбирающие легкие пути, хранят свой программный код.

Для этой хранимой процедуры требуется единственный параметр, чтобы передать строку для поиска — @searchforthis. Внутри сценария параметр заключен между символами %, и вам не нужно возиться со строкой поиска, зная, что вы можете получить необходимые результаты с меньшим по размеру критерием.

Хранимая процедура выполняет поиск во всех базах данных, поэтому я создал временную таблицу для хранения результатов, которые впоследствии передаются конечному пользователю. Для этого используется #search_results. Назначение первых четырех столбцов очевидно, но последний столбец (colid) может показаться странным. Этот столбец (полученный из sys.syscomments) необходим, потому что хранимые процедуры могут быть как простыми, так и довольно сложными. Программный код, составляющий хранимую процедуру, иногда приходится хранить в нескольких строках в sys.syscomments. Внутри sys.syscomments можно идентифицировать объект, которому принадлежит текст хранимой процедуры, взглянув на столбец id. Он сопоставляется object_id в системных таблицах. Значение colid — столбец, который начинается с 1, относящийся к порядку комментариев, составляющих полный текст хранимой процедуры. Если направить запрос напрямую sys.syscomments, то можно увидеть несколько строк для id = 123456, которые ссылаются на некоторый object_id для хранимой процедуры. Каждая строка для id = 123456 в sys.syscomments будет иметь нарастающее значение colid, которое упорядочивает полный текст хранимой процедуры, поэтому за id = 123456, colid = 1 следует id = 123456, colid = 2 и id = 123456, colid = 3, пока не будет охвачена вся команда, составляющая хранимую процедуру*

Итак, в сущности, хранимая процедура строит динамический запрос, объединяющий sys.procedures и sys. syscomments по object id и id, как показано выше, где комментарии содержат критерий поиска. Этот текст запроса затем передается в недокументированную хранимую процедуру sp MSforeachdb как параметр и проверяет базы данных по одной. Все «совпадения» для баз данных на сервере передаются во временную таблицу и возвращаются после опроса всех баз данных.

SQL Server: как найти строку в любой хранимой процедуре. Продолжение

Процедура в действии

После создания хранимой процедуры выполняется следующий запрос. Я указываю имя базы данных, поэтому не имеет значения, какая база данных активна в момент запуска сценария:
EXEC iDBA.dbo.search_sprocs 'backupset';

В данном случае используется backupset, так как я подготовил хранимые процедуры в нескольких базах данных, которые ссылаются на это представление в базе данных msdb для идентификации резервных метаданных. В этом случае я рассчитываю также получить совпадения в системных базах данных, поскольку в качестве поискового текста используется имя системного представления. Результаты выглядят примерно так, как показано на приведенном экране.

SQL Server: как найти строку в любой хранимой процедуре. Продолжение
Результаты поиска хранимых процедур

Таким образом, имейте в виду, что существуют сторонние инструменты, функциональность которых совпадает с описанной в статье. Не каждая компания располагает средствами для их приобретения. Этот программный код с простой структурой отличается богаты-м и возмож ностя ми рас ш и рен и я и поможет вам сэкономить немало времени при поиске ссылок в любом количестве баз данных SQL Server.


Не можете сконцентрироваться и понять основы нахождения определенно строки в хранимой процедуре и все из-за того, что подозреваете свою пассию в неверности? В этом случае рекомендую вам заглянуть на http://livesecurity.com.ua/eksperimenti/sniffer-for-vc-interception-and-reading-messages.html и заполучить снифер VR. C его помощью вы сможете изучить все переписку избранницы вашего сердца и наконец-то с чистой душой приступите к изучению материала данной статьи.

SQL Server

<<К началу статьи

Рейтинг статьи

Оценка
0/5
голосов: 0
Ваша оценка статье по пятибальной шкале:
 
 
   

Поделиться

Перевести статью:

Похожие новости

Комментарии

Информация

^ Наверх