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

Sql 如何知道一个存储过程是否是从其他存储过程执行的?,sql,sql-server,stored-procedures,Sql,Sql Server,Stored Procedures,我对存储过程做了一些更改,在我的项目中有500多个存储过程 可能有一些存储过程正在其中执行我的存储过程A 现在我需要知道,我的更改会影响哪些其他存储过程 我的意思是:如何知道存储过程A是从哪个存储过程调用的?有可能吗?您可以使用以下查询来搜索调用您的过程 select p.name , m.definition from sys.procedures p inner join sys.sql_modules m on p.object_id = m.obj

我对存储过程做了一些更改,在我的项目中有500多个存储过程

可能有一些存储过程正在其中执行我的存储过程A

现在我需要知道,我的更改会影响哪些其他存储过程


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

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

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%'

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

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

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%'

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

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

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%'

您可以通过以下方式找到它们:

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%'

有几种方法可以查找依赖项。所以,优先顺序

数据库项目 如果您尚未使用这些工具;你真的应该这样

这里是你开始冒险的地方,年轻的学徒:

SSMS中的依赖性检查器 简言之;在SQL Server Management Studio的“对象资源管理器”窗格中的对象上单击鼠标右键,然后选择“显示依赖项…”

关于此答案的示例,请参见:

一些SQL! e、 g.sys.sql\u表达式\u依赖项


有几种方法可以查找依赖项。所以,优先顺序

数据库项目 如果您尚未使用这些工具;你真的应该这样

这里是你开始冒险的地方,年轻的学徒:

SSMS中的依赖性检查器 简言之;在SQL Server Management Studio的“对象资源管理器”窗格中的对象上单击鼠标右键,然后选择“显示依赖项…”

关于此答案的示例,请参见:

一些SQL! e、 g.sys.sql\u表达式\u依赖项


您需要查看其他SP的定义。您可以使用类似的方法来执行此操作,也可以使用sys.sql_modules和sys.procedures对象,对definition列使用as-like语句。但是,存储过程可以执行动态SQL,并且元数据中不会捕获这些调用。因此,我希望对实际发生的情况进行审计跟踪。您需要查看其他SP的定义。您可以使用类似的方法来执行此操作,也可以使用sys.sql_modules和sys.procedures对象,对definition列使用as-like语句。但是,存储过程可以执行动态SQL,并且元数据中不会捕获这些调用。出于这个原因,我想对实际发生的事情进行审计跟踪。谢谢你的否决票,但为什么呢?我的答案怎么了?嘿@Radu,我没有否决你的答案,是别人否决了。我给你+1。我发现这三个答案都很有用,我给了他们+1分。谢谢,谢谢你的否决票,但是为什么?我的答案怎么了?嘿@Radu,我没有否决你的答案,是别人否决了。我给你+1。我发现这三个答案都很有用,我给了他们+1分。谢谢