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

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

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

Предлагаю вашему вниманию статью о ссылках и поиске путеводных нитей.

Когда-то темой одной из моих первых публикаций стал поиск конкретных столбцов, позволяющих определить, внутри какой таблицы (или таблиц) может находиться столбец в базе данных. Для решения задачи использовалось системное представление каталога sys.all_columns. Поводом для написания статьи стало то, что мне, как администратору баз данных, приходилось обслуживать более 2000 отдельных баз данных, разработанных как внутри компании, так и сотнями независимых поставщиков программного обеспечения. Каждая компания-разработчик — и разработчик внутри компании — имеет собственный стиль программирования. Поиск ошибок внутри незнакомого кода — одна из задач специалиста по данным, которой приходится уделять время регулярно. Целью той давней статьи была идентификация мест, где существуют столбцы для устранения проблемы, влияющей на время непрерывной работы продукта, предназначенного для области здравоохранения.

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

Прошли годы, и я оказался в новой роли и в другой компании. Я по-прежнему использую программный код из той статьи, но мне еще необходимо понять, каким образом группы разработки используют хранимые процедуры в продукте, поскольку на меня возложены обязанности не только администратора, но и программиста, и проектировщика баз данных.

Чтобы выполнять диагностику проблем и разрабатывать новый программный код, мне было важно создать сценарий поиска для идентификации конкретных объектов, структур кода или предикатов. И это оказалось гораздо сложнее, чем отыскать компанию, которая осуществляет печать настенных календарей, - по крайней мере, эту просьбу моего начальника я выполнил максимально быстро.

Хранимая процедура для поиска хранимых процедур

Итак, моя цель в данном случае — создать хранимую процедуру, которую можно использовать для обнаружения любых ссылок на объект, выяснения структуры кода и т.д. У меня есть строка, которую нужно найти во всех базах данных, чтобы возвратить результаты для любой хранимой процедуры с использованием строки, переданной в качестве переменной для поиска.

Просто знать имя хранимой процедуры недостаточно. Поэтому конечный результат будет содержать следующие столбцы:
• имя базы данных;
• имя схемы;
• имя хранимой процедуры;
• код хранимой процедуры.

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

Чтобы построить такую хранимую процедуру, потребуется несколько системных объектов: два системных представления каталога и одна недокументированная системная хранимая процедура. Начнем с системных представлений каталога:
• sys.procedures. Это системное представление собирает метаданные обо всех хранимых процедурах в базе данных. Каждая база данных имеет представление каталога sys.procedures. Возвращаются только результаты для содержимого базы данных, в котором оно размещено.
• sys.syscomments. Это системное представление хранит исходный текст для каждой хранимой процедуры. В случае sys.procedures, sys.comments также действует в масштабе базы данных, поэтому предоставляет лишь сведения об объектах собственной базы данных.

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

Недокументированная системная хранимая процедура — sys.sp_ MSforeachdb используется потому, что два системных представления каталога действуют в масштабе базы данных, следовательно, необходим способ возвращать результаты для этого запроса из всех баз данных. Вместе с Microsoft SQL Server поставляется недокументированная хранимая процедура в базе данных master, которая обеспечивает соответствующую функциональность. Вы можете передать параметр для команды T-SQL, которую нужно запустить для каждой базы данных, и результаты возвращаются как отдельные наборы записей для каждой базы данных, к которой применяется программный код.


Читать дальше...

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

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

Поделиться

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

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

Комментарии

Информация

^ Наверх