Ответ 1
SELECT
OBJECT_NAME(OBJECT_ID),
definition
FROM
sys.sql_modules
WHERE
objectproperty(OBJECT_ID, 'IsProcedure') = 1
AND definition LIKE '%Foo%'
Я изучаю устаревшую систему баз данных и очень мало знаю о ее внутренних компонентах. Я хотел бы найти все хранимые процедуры, которые вызывают другую хранимую процедуру A
.
Как лучше всего это сделать?
Могу ли я написать что-то вроде этого псевдокода:
select name from AllStoredProcedures as Asp where Asp.TextualContent contains 'A'
Asp.TextualContent
означает фактический SQL, содержащийся в SP.
SELECT
OBJECT_NAME(OBJECT_ID),
definition
FROM
sys.sql_modules
WHERE
objectproperty(OBJECT_ID, 'IsProcedure') = 1
AND definition LIKE '%Foo%'
Для 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
Этот запрос будет извлекать текстовое определение хранимых процедур и фильтровать с помощью простого шаблона.
За 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%'
Попробуйте Только один оператор может решить вашу проблему.
SELECT OBJECT_DEFINITION(OBJECT_ID(N'dbo.myStoredProc'))
или
SELECT @objname= OBJECT_DEFINITION(OBJECT_ID(N'dbo.myStoredProc'))
print @objname