Как идентифицировать все хранимые процедуры, ссылающиеся на определенную таблицу

Я создал таблицу для среды разработки для тестирования, и есть несколько sp, которые обновляют эту таблицу. Теперь мне нужно отбросить эту таблицу, а также идентифицировать все sp, которые ссылаются на эту таблицу. Мне сложно найти список всех sp. Пожалуйста, предложите некоторый запрос, предположив, что имя таблицы "x", а база данных - SQL Server 2005.

Ответ 2

Ниже описаны работы 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

Ответ 3

Не-запрос будет использовать Sql Server Management Studio.

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

ИЗМЕНИТЬ

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

Ответ 4

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

EXEC sp_depends @objname = N'TableName';

Ответ 5

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

select 
   so.name, 
   text 
from 
   sysobjects so, 
   syscomments sc 
where 
   so.id = sc.id 
   and UPPER(text) like '%<TABLE NAME>%'

Ответ 6

ниже запрос работает только для таблицы не для столбца

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

Ответ 7

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", тогда вы получите результаты для обоих.

Ответ 8

SELECT DISTINCT OBJECT_NAME(OBJECT_ID),
object_definition(OBJECT_ID)
FROM sys.Procedures
WHERE object_definition(OBJECT_ID) LIKE '%' + 'table_name' + '%'

GO

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