如何知道某个存储过程是否从其他存储过程执行?

时间:2019-10-23 09:32:28

标签: sql sql-server stored-procedures

我对存储过程进行了一些更改(说A),在我的项目中,有500多个存储过程。

其中可以存在执行我的存储过程 A 的存储过程。

现在我需要知道,哪些其他存储过程会因更改而受到影响?

我的意思是:如何知道从哪个其他存储过程中调用存储过程 A ?有可能吗?

3 个答案:

答案 0 :(得分:1)

您可以使用以下方法找到它们:

SELECT  P.name
,       SM.definition
FROM    sys.procedures AS P
INNER JOIN sys.sql_modules AS SM
        ON SM.object_id = P.object_id
WHERE   SM.definition LIKE '%ProcedureA%'

答案 1 :(得分:1)

有几种方法可以找到依赖关系。所以,客栈的优先顺序...

数据库项目

如果您尚未使用它们;你真的应该是。

年轻的Padawan,这里是开始冒险的地方:https://docs.microsoft.com/en-us/visualstudio/data-tools/creating-and-managing-databases-and-data-tier-applications-in-visual-studio?view=vs-2019

SSMS中的依赖性检查器

简而言之;在SQL Server Management Studio的“对象资源管理器”窗格中右键单击该对象,然后选择“显示依赖项...”

此答案的示例,在这里:Microsoft SQL Server foreign key dependencies show up using sp_MSdependencies but are not listed in sys.foreign_keys

一些SQL!

例如sys.sql_expression_dependencies

https://docs.microsoft.com/en-us/sql/relational-databases/system-catalog-views/sys-sql-expression-dependencies-transact-sql?view=sql-server-ver15

答案 2 :(得分:0)

您可以使用以下查询来搜索调用您的过程。

select
    p.name
    , m.definition
from sys.procedures p
    inner join sys.sql_modules m
        on p.object_id = m.object_id
where n.[name] <> 'procedure_name'
    and m.definition like '%procedure_name%'

本质上,您正在浏览存储过程的定义,并寻找存储过程的名称/文本。