Как узнать имена хранимых процедур внутри обычной хранимой процедуры в SQL Server 2012 - PullRequest
0 голосов
/ 17 января 2019

У меня есть простая хранимая процедура Proc_My_SP:

BEGIN
   DECLARE @Results TABLE (Tid INT PRIMARY KEY);

   INSERT @Results

   EXEC Procedure2 [parameters];
   SET @total 1;

END
SELECT @total

Вопрос: с использованием Proc_My_SP, эту хранимую процедуру я хочу распечатать Procedure2 - только имя

Если Proc_My_SP содержит несколько таких вызовов Procedure2, Procedure3 и других, я хочу перечислить их один за другим

Найти все имена хранимых процедур внутри хранимой процедурыи распечатать их

РЕДАКТИРОВАНИЕ

Я попытался получить текст хранимой процедуры следующим образом

DECLARE @SPTEXT NVARCHAR(MAX)

SET @SPTEXT = (SELECT ROUTINE_DEFINITION 
               FROM INFORMATION_SCHEMA.ROUTINES
               WHERE SPECIFIC_NAME = 'Proc_My_SP')
PRINT @SPTEXT

Но из @SPTEXT,как найти все имена хранимых процедур?

1 Ответ

0 голосов
/ 17 января 2019

Вы можете попробовать следующий запрос.

SELECT NAME AS ObjectName
    ,schema_name(o.schema_id) AS SchemaName
    ,type
    ,o.type_desc
FROM sys.objects o
WHERE o.is_ms_shipped = 0
    AND o.NAME LIKE '%Add%'
    AND type = 'p'
ORDER BY o.NAME

OR

SELECT NAME AS ObjectName
    ,schema_name(o.schema_id) AS SchemaName
    ,type
    ,o.type_desc
FROM sys.objects o
WHERE o.is_ms_shipped = 0
    --AND o.NAME LIKE '%Add%'
    AND OBJECT_DEFINITION(object_id) Like '%YourSearchTextHere%'
    AND type = 'p'
ORDER BY o.NAME

Первый запрос будет искать только по имени, а второй будет искать содержимое в любом месте SP.

EDIT

SELECT o.name, dependentObject.name
 FROM sysdepends d 
INNER JOIN sysobjects o on d.id = o.id 
INNER JOIN sysobjects dependentObject on d.depid = dependentObject.id
WHERE o.xtype = 'P' AND dependentObject.xtype = 'P'

Этот запрос даст вам имя зависимого объекта.

...