我使用context_info来模拟全局变量,我在此上下文中使用它。
我有几个批处理的脚本,我在开头设置了一个全局变量(示例中为123
),然后在所有批次之后我使用该数字来填充日志表。
现在这样可行,但今天它在一台机器上失败了,我无法理解为什么。 context_info不应该起作用的原因是什么?我尝试用context_info
手动替换123
,脚本成功了。该脚本是从Delphi应用程序运行的。
DECLARE @GlobalInteger binary(128)
SET @GlobalInteger =cast(123 as binary(128))
SET CONTEXT_INFO @GlobalInteger
GO
BATCH 1
GO
...
BATCH N
GO
INSERT INTO TABLE_LOG VALUES (cast(context_info() as INT)
答案 0 :(得分:3)
CONTEXT_INFO
文档中有一些备注:
多个活动结果集(MARS) 使应用程序能够运行多个 批量或请求,同时 在同一个连接上。当其中之一 MARS连接上的批次运行 SET CONTEXT_INFO,新上下文 值由CONTEXT_INFO返回 在它运行时运行 批处理作为SET语句。新的 值不会被返回 CONTEXT_INFO函数在一个或中运行 更多的其他批次 连接,除非他们开始 运行SET语句的批处理 完成
关于值如何传播到暴露它的各种视图(sys.dm_exec_requests,sys.dm_exec_sessions和CONTEXT_INFO本身),也有一些解释,请参阅使用Session Context Information。在某些地方,信息立即可见,其他地方只有在批次完成后才可见。