Как определить все хранимые процедуры, ссылаясь на конкретную таблицу - PullRequest
109 голосов
/ 01 сентября 2011

Я создал таблицу среды разработки для целей тестирования, и есть несколько sp, которые обновляют эту таблицу. Теперь мне нужно удалить эту таблицу, а также определить все sp, которые ссылаются на эту таблицу. Я сталкиваюсь с трудностями, чтобы найти список всех зр. Пожалуйста, предложите некоторый запрос, предполагая, что имя таблицы - «x», а база данных - sql server 2005.

Ответы [ 10 ]

208 голосов
/ 01 сентября 2011
SELECT Name
FROM sys.procedures
WHERE OBJECT_DEFINITION(OBJECT_ID) LIKE '%TableNameOrWhatever%'

Кстати - вот полезный ресурс для этого типа вопроса: Запрос часто задаваемых вопросов по каталогу системного каталога SQL Server

24 голосов
/ 07 августа 2013

Следующее работает на SQL2008 и выше.Предоставляет список хранимых процедур и функций.

select distinct [Table Name] = o.Name, [Found In] = sp.Name, sp.type_desc
  from sys.objects o inner join sys.sql_expression_dependencies  sd on o.object_id = sd.referenced_id
                inner join sys.objects sp on sd.referencing_id = sp.object_id
                    and sp.type in ('P', 'FN')
  where o.name = 'YourTableName'
  order by sp.Name
16 голосов
/ 01 сентября 2011

Без запроса можно использовать Sql Server Management Studio.

Найдите таблицу, щелкните правой кнопкой мыши и выберите «Просмотр зависимостей».

EDIT

Но, как сказали комментаторы, это не очень надежно.

14 голосов
/ 16 октября 2014

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

EXEC sp_depends @objname = N'TableName';
6 голосов
/ 30 мая 2014

Следующий запрос извлечет все имена хранимых процедур и соответствующее определение этих SP

select 
   so.name, 
   text 
from 
   sysobjects so, 
   syscomments sc 
where 
   so.id = sc.id 
   and UPPER(text) like '%<TABLE NAME>%'
5 голосов
/ 25 августа 2015

Запрос ниже работает только при поиске зависимостей в таблице, а не в столбце:

EXEC sp_depends @objname = N'TableName';

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

 select distinct
        so.name
        --, text 
  from 
       sysobjects so, 
       syscomments sc 
  where 
     so.id = sc.id 
     and lower(text) like '%organizationtypeid%'
  order by so.name
5 голосов
/ 01 сентября 2011
SELECT
    o.name
FROM
    sys.sql_modules sm
INNER JOIN sys.objects o ON
    o.object_id = sm.object_id
WHERE
    sm.definition LIKE '%<table name>%'

Просто имейте в виду, что это также вызовет SP, где имя таблицы находится в комментариях или где имя таблицы является подстрокой другого имени таблицы, которая используется.Например, если у вас есть таблицы с именами «test» и «test_2», и вы пытаетесь найти SP с помощью «test», вы получите результаты для обоих.

3 голосов
/ 05 сентября 2018

В Management Studio вы можете просто щелкнуть правой кнопкой мыши по таблице и выбрать «Просмотр зависимостей» enter image description here

, чем вы можете увидеть список объектов, которые имеют зависимости с вашей таблицей: enter image description here

2 голосов
/ 12 июня 2017
SELECT DISTINCT OBJECT_NAME(OBJECT_ID),
object_definition(OBJECT_ID)
FROM sys.Procedures
WHERE object_definition(OBJECT_ID) LIKE '%' + 'table_name' + '%'

GO

Это будет работать, если вам нужно упомянуть имя таблицы.

0 голосов
/ 09 февраля 2019

Попробуйте

   SELECT DISTINCT so.name
    FROM syscomments sc
    INNER JOIN sysobjects so ON sc.id=so.id
    WHERE sc.TEXT LIKE '%your table name%'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...