Почему context_info может потерпеть неудачу? - PullRequest
1 голос
/ 13 июля 2010

Я использую 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 Ответ

3 голосов
/ 13 июля 2010

В документации CONTEXT_INFO есть некоторые замечания:

Несколько активных наборов результатов (MARS) позволяют приложениям запускать несколько пакетов или запросов одновременнона том же соединении.Когда один из пакетов в соединении MARS запускает SET CONTEXT_INFO, новое значение контекста возвращается функцией CONTEXT_INFO, когда оно выполняется в том же пакете, что и оператор SET.Новое значение не возвращается функцией CONTEXT_INFO, запущенной в одном или нескольких других пакетах соединения, если только они не начались после того, как пакет, выполнивший оператор SET, завершилсякак это значение распространяется на различные его представления (sys.dm_exec_requests, sys.dm_exec_sessions и CONTEXT_INFO), см. Использование Информация о контексте сессии В некоторых местах информация видна сразу, в других местах видна только после завершения партии.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...