如果 Proc A 执行 Proc B,Proc B 是否有办法查找它是由 A 调用的,而不是使用 A 向 B 传递其 ID 的参数?
根据请求:我对此感兴趣的原因是多方面的 1)一般知识,我确信如果可以做到这一点,它将涉及巧妙使用一些系统表/变量,这可能会帮助我做其他事情。
2)正如其他人提到的,日志记录/审计。我想创建一个过程,记录不需要参数的开始、结束和消息条目,并接受用户指定消息的一个可选参数。这将允许人们简单地在过程的顶部和底部放置一个执行程序以使其工作,并且审计程序将自行计算出其余部分。
我知道这些信息可以在日志文件中找到,但是解析这些信息并将其提供给用户并不是那么简单,然而,这可以轻松访问该基本信息。
3)与信号量结合使用,这样的通用过程可以确保无论 session /事务等如何,相关进程都不会同时执行。
最佳答案
使用这样的参数:
CREATE PROCEDURE ParentProcedure
AS
DECLARE @ProcID int
SET @ProcID=@@PROCID
EXEC ChildProcedure @ProcID
RETURN 0
go
还有这个...
CREATE PROCEDURE ChildProcedure
(
@ProcID int=null --optional
)
AS
if @ProcID IS NOT NULL
BEGIN
PRINT 'called by '+OBJECT_NAME(@ProcID)
END
RETURN 0
go
关于sql-server - SQL Server 存储过程可以确定其父过程的名称吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1144716/