sql-server - 确定proc B的调用者是否是proc A
问题描述
有什么方法可以知道,每次程序 B 运行时,如果它是由程序 A 调用的?
我不想使用 context_info,因为它可能会被调用堆栈中的其他 proc 使用,并且我想避免 SESSION_CONTEXT (尽管它似乎是更好的解决方案),因为我的许多客户的版本都 <2016。
解决方案
……
create or alter procedure procA
as
begin
declare @hdoc int, @doc char(1);
--xml doc
EXEC sp_xml_preparedocument @hdoc OUTPUT, @doc;
exec procB
--remove xml doc
exec sp_xml_removedocument @hdoc;
end
go
create or alter procedure procB
as
begin
declare @hdoc int, @doc char(1);
--xml doc
EXEC sp_xml_preparedocument @hdoc OUTPUT, @doc;
exec procC
--remove xml doc
exec sp_xml_removedocument @hdoc;
end
go
create or alter procedure procC
as
begin
select object_name(@@procid) as whoami, object_name(t.objectid) as whoiscalling, s.creation_time as at
from sys.dm_exec_xml_handles(@@spid) as s
cross apply sys.dm_exec_sql_text(s.sql_handle) as t;
end
go
exec procA
go
exec procB
go
drop procedure procA
go
drop procedure procB
go
drop procedure procC
go
推荐阅读
- python - 从python将颜色值拉入firebase
- python - 我试图比较来自用户输入的 2 个列表,但它 gi
- javascript - 反应如何停止相交观察
- java - 需要将控制台输出存储在数据库表中
- c# - 每帧更新布尔 if 语句
- dpi - 如何在两台计算机上使用 Pango 渲染匹配的文本?
- wordpress - htaccess 和 wordpress 永久链接
- python-3.x - How Do I Create New Pandas Column Based On Word In A List
- python - 无需 elseif 即可设置类变量的优雅方法
- c# - 阅读 Service Bus 主题订阅死信队列 (DLQ) C# 的最佳方式