Список хранимых процедур из таблицы - PullRequest
7 голосов
/ 23 сентября 2008

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

Ответы [ 7 ]

14 голосов
/ 23 сентября 2008

sys.sql_dependencies содержит список сущностей с зависимостями, включая таблицы и столбцы, которые sproc включает в запросы. См. этот пост для примера запроса, который получает зависимости. Фрагмент кода ниже получит список зависимостей таблицы / столбца с помощью хранимой процедуры

select sp.name       as sproc_name
      ,t.name        as table_name
      ,c.name        as column_name
 from sys.sql_dependencies d
 join sys.objects t
   on t.object_id = d.referenced_major_id
 join sys.objects sp
   on sp.object_id = d.object_id
 join sys.columns c
   on c.object_id = t.object_id
  and c.column_id = d.referenced_minor_id
where sp.type = 'P'
10 голосов
/ 23 сентября 2008
select
  so.name,
  sc.text
from
  sysobjects so inner join syscomments sc on so.id = sc.id
where
  sc.text like '%INSERT INTO xyz%'
  or sc.text like '%UPDATE xyz%'

Это даст вам список всего содержимого хранимых процедур с INSERT или UPDATE в них для конкретной таблицы (очевидно, вы можете настроить запрос так, чтобы он подходил). Кроме того, более длинные процедуры будут разбиты на несколько строк в возвращенном наборе записей, поэтому вам, возможно, придется немного просеять результаты вручную.

Редактировать : Оптимизированный запрос для возврата имени SP. Также обратите внимание, что приведенный выше запрос вернет все UDF, а также SP.

2 голосов
/ 23 сентября 2008

Использовать sys.dm_sql_referencing_entities

Обратите внимание, что sp_depends устарел.

Ссылка MSDN

1 голос
/ 23 сентября 2008

Если вы загрузите sp_search_code с веб-сайта Vyaskn, это позволит вам найти любой текст в объектах вашей базы данных.

http://vyaskn.tripod.com/sql_server_search_stored_procedure_code.htm

1 голос
/ 23 сентября 2008

Это похоже на работу:

select<br> so.name as [proc],<br> so2.name as [table],<br> sd.is_updated<br> from sysobjects so<br> inner join sys.sql_dependencies sd on so.id = sd.object_id<br> inner join sysobjects so2 on sd.referenced_major_id = so2.id<br> where so.xtype = 'p' -- procedure<br> and is_updated = 1 -- proc updates table, or at least, I think that's what this means

1 голос
/ 23 сентября 2008

Вы можете попробовать экспортировать все ваши хранимые процедуры в текстовый файл, а затем использовать простой поиск.

Более продвинутым методом было бы использование регулярного выражения для поиска всех записей SELECT FROM и INSERT FROM.

0 голосов
/ 23 сентября 2008
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 '%UPDATE%' OR SC.Text LIKE '%INSERT%')
ORDER BY SO.Name

Эта ссылка использовалась в качестве ресурса для поиска SP.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...