2010-07-13 3 views
0

Я использую 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) 

ответ

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. В некоторых местах информация видна сразу, в других местах видна только после завершения партии.

Смежные вопросы