为什么context_info会失败?

时间:2010-07-13 14:18:53

标签: sql-server delphi context-info

我使用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)

1 个答案:

答案 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。在某些地方,信息立即可见,其他地方只有在批次完成后才可见。