1

我正在使用 context_info 来模拟一个全局变量,我在这个上下文中使用它。

我有由几个批次组成的脚本,我在开头(123在示例中)设置了一个全局变量,然后在所有批次之后我使用该数字来填充日志表。

现在这可行,但今天它在一台机器上失败了,我不知道为什么。context_info 不起作用有什么原因吗?我尝试手动替换context_info123脚本成功了。该脚本是从 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)
4

1 回答 1

3

文档中有一些备注CONTEXT_INFO

多个活动结果集 (MARS) 使应用程序能够在同一连接上同时运行多个批处理或请求。当 MARS 连接上的批处理之一运行 SET CONTEXT_INFO 时,新上下文值由 CONTEXT_INFO 函数在与 SET 语句在同一批处理中运行时返回。在连接上的一个或多个其他批处理中运行的 CONTEXT_INFO 函数不会返回新值,除非它们在运行 SET 语句的批处理完成后启动

还有一些关于值如何传播到暴露它的各种视图(sys.dm_exec_requests、sys.dm_exec_sessions 和 CONTEXT_INFO 本身)的解释,请参阅使用会话上下文信息。在某些地方,信息立即可见,而在其他地方,只有在批处理完成后才能看到。

于 2010-07-13T16:58:51.907 回答