2010-07-13 92 views
0

我使用context_info来模拟一个全局变量,我在这里使用它。为什么context_info可能会失败?

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

现在这个工作,但今天它在一台机器上失败,我不明白为什么。有没有理由为什么context_info不应该工作?我试图用123手动替换context_info,并且脚本成功。该脚本是从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) 

回答

2

有一些备注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。在一些地方,信息可以立即看到,其他地方只有在批次完成后才能看到。