sql-server - SQL Server 存储过程可以确定其父过程的名称吗?

标签 sql-server tsql

如果 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/

相关文章:

sql - 复杂的 SQL while 循环

sql-server - 在 SQL Server 中创建函数?

针对日期范围的 SQL 连接?

sql-server - TSQL : Timeouts on High traffic table

C# 非常快速地从文本文件添加数千行到数据库

sql - 在 SQL Server 中对结果进行分页的最佳方式是什么

.net - 从.net如何将许多 “batches” SQL发送到Sql-Server而不需要大量往返?

sql - XML解析奇怪错误: line 1,字符2038,非法xml字符

SQL Server 2005 - WHERE 子句 - 使用 IF 或 CASE 或 BOOLEAN?

c# - 无法插入数据库