2015-02-20 2 views

ответ

2

Это старт. Вы можете выполнить динамический SQL, используя EXEC и sp_executesql, так что вы хотите найти хранимые процедуры, содержащих эти команды:

SELECT 
    SP_NAME = o.name 
FROM sys.sql_modules m 
INNER JOIN sys.objects o 
    ON m.object_id = o.object_id 
WHERE 
    m.definition LIKE '%EXEC%' 
    OR m.definition LIKE '%SP_EXECUTESQL%' 

По предложению Coder Кодекса, вместо sys.objects, вы могли бы JOIN его sys.procedures ,

Вот другой способ в соответствии с моего поиска Google:

Использование sys.procedures:

SELECT 
    SP_NAME = name 
FROM sys.procedures 
WHERE 
    OBJECT_DEFINITION(object_id) LIKE '%EXEC%' 
    OR OBJECT_DEFINITION(object_id)LIKE '%SP_EXECUTESQL%' 

Использование sys.sql_modules:

SELECT 
    SP_NAME = OBJECT_NAME(OBJECT_ID) 
FROM sys.sql_modules 
WHERE 
    OBJECTPROPERTY(OBJECT_ID, 'IsProcedure') = 1 
    AND (
     definition LIKE '%EXEC%' 
     OR definition LIKE '%SP_EXECUTESQL%' 
    ) 
+0

вы можете присоединиться к внутренней direactly на 'sys.procedures' получить только procedures.Or там какой-либо вопрос с этим? –

+0

Вы тоже можете это сделать, это еще проще запомнить. Я отредактирую свой ответ. Благодаря! –

+0

@wewesthemenace Ваш код по-прежнему не ссылается на sys.procedures – Adil

0

может быть это поможет

select * from sys.syscomments where text like '%exec%' AND 'SOME OTHER CONDITIONS' 
0

Попробуйте это.

select b.name as Sp_Names from sys.syscomments a,sys.procedures b 
where a.id=b.object_id and (a.text like '%exec%' or a.text like '%sp_executesql%') 
Смежные вопросы