Запрос содержимого хранимых процедур на SQL Server - PullRequest
28 голосов
/ 07 октября 2011

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

Как лучше всего это сделать?

Можно ли написать что-то вроде этого псевдокода:

select name from AllStoredProcedures as Asp where Asp.TextualContent contains 'A'

Asp.TextualContent означает фактический SQL, содержащийся в SP.

Ответы [ 4 ]

49 голосов
/ 07 октября 2011
SELECT
    OBJECT_NAME(OBJECT_ID),
    definition
FROM
    sys.sql_modules
WHERE
    objectproperty(OBJECT_ID, 'IsProcedure') = 1
AND definition LIKE '%Foo%' 
6 голосов
/ 07 октября 2011

Для SQL Server 2005/2008:

SELECT  s.name SchemaName
        ,o.name RoutineName
        ,o.[type] RoutineType
        ,procs.*
FROM    sys.sql_modules procs
INNER JOIN sys.objects o ON procs.object_id = o.object_id 
INNER JOIN sys.schemas s ON o.schema_id = s.schema_id
WHERE   procs.[definition] LIKE '%A%'
--AND       o.[type] = 'P' --'P' for stored procedures
2 голосов
/ 07 октября 2011

Этот запрос извлекает текстовое определение хранимых процедур и фильтрует их с использованием простого подстановочного знака.

Для 2000 (не проверено, но IIRC - правильная таблица):

select p.[type]
      ,p.[name]
      ,c.[text]
  from sysobjects p
  join syscomments c
    on p.object_id = c.id
 where p.[type] = 'P'
   and c.[text] like '%foo%'

Для 2005:

select p.[type]
      ,p.[name]
      ,c.[text]
  from sys.objects p
  join sys.syscomments c
    on p.object_id = c.id
 where p.[type] = 'P'
   and c.[text] like '%foo%'

На 2005 и 2008 годы +

select p.[type]
      ,p.[name]
      ,c.[definition]
  from sys.objects p
  join sys.sql_modules c
    on p.object_id = c.object_id
 where p.[type] = 'P'
   and c.[definition] like '%foo%'
1 голос
/ 02 сентября 2016

Попробуйте Это только одно утверждение может решить вашу проблему ..

SELECT OBJECT_DEFINITION(OBJECT_ID(N'dbo.myStoredProc'))

или

SELECT @objname= OBJECT_DEFINITION(OBJECT_ID(N'dbo.myStoredProc'))
print @objname
...