Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Помогите разобраться с переменными MSSQL  [new]
Игорь_UUS
Member

Откуда: г. Екатеринбург
Сообщений: 532
Добрый день.

При определённом выполнении хранимая процедура должна передать параметры в переменную сеанса, которая автоматически "обнулится" по завершению череды выполнения хранимых процедур.

Т.е. вызвали интерфейсную хранимую процедуру, та вызывает вторую, та третью... "где-то в недрах череды выполнения, какая-то" хранимая процедура, сохраняет параметры в глобальную переменную для данного сеанса... и эти параметры могут быть прочитаны в первой хранимой процедуре с которой всё начиналось...

Что-то подобное можно сделать? (output переменной хранимки не предлагать!)
9 янв 19, 15:15    [21780658]     Ответить | Цитировать Сообщить модератору
 Re: Помогите разобраться с переменными MSSQL  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 35905
context_info или банальная таблица
9 янв 19, 15:28    [21780676]     Ответить | Цитировать Сообщить модератору
 Re: Помогите разобраться с переменными MSSQL  [new]
court
Member

Откуда:
Сообщений: 1539
Игорь_UUS,

CONTEXT_INFO - не ?

Или, если версия позволяет, совсем "по-богатому" - SESSION_CONTEXT
9 янв 19, 15:30    [21780678]     Ответить | Цитировать Сообщить модератору
 Re: Помогите разобраться с переменными MSSQL  [new]
Игорь_UUS
Member

Откуда: г. Екатеринбург
Сообщений: 532
court
Игорь_UUS,

CONTEXT_INFO - не ?

Или, если версия позволяет, совсем "по-богатому" - SESSION_CONTEXT


то что надо, спасибо... SESSION_CONTEXT не подойдёт т.к. mssql 2008

существенный минус, что можно сохранить только 128 символов((
9 янв 19, 15:55    [21780704]     Ответить | Цитировать Сообщить модератору
 Re: Помогите разобраться с переменными MSSQL  [new]
Игорь_UUS
Member

Откуда: г. Екатеринбург
Сообщений: 532
Гавриленко Сергей Алексеевич
context_info или банальная таблица


"банальная таблица" - идея ясна... но таблица начнёт "копить данные"... тут сложность, что очень много сессий, у каждого могут быть свои сообщения
9 янв 19, 15:56    [21780707]     Ответить | Цитировать Сообщить модератору
 Re: Помогите разобраться с переменными MSSQL  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 27523
Игорь_UUS
Гавриленко Сергей Алексеевич
context_info или банальная таблица


"банальная таблица" - идея ясна... но таблица начнёт "копить данные"... тут сложность, что очень много сессий, у каждого могут быть свои сообщения
"банальная таблица" - это заменитель context_info, в таблице вы можете реализовать точно такую же логику работы, но без ограничения размера.
9 янв 19, 16:03    [21780727]     Ответить | Цитировать Сообщить модератору
 Re: Помогите разобраться с переменными MSSQL  [new]
Игорь_UUS
Member

Откуда: г. Екатеринбург
Сообщений: 532
court
Игорь_UUS,

CONTEXT_INFO - не ?


а как обнулить данную переменную...

DECLARE @context_info varbinary(128) 
SET CONTEXT_INFO @context_info


пишет ошибку: "инструкция SET CONTEXT_INFO требует параметр varbinary (128) NOT NULL."
9 янв 19, 16:10    [21780741]     Ответить | Цитировать Сообщить модератору
 Re: Помогите разобраться с переменными MSSQL  [new]
Игорь_UUS
Member

Откуда: г. Екатеринбург
Сообщений: 532
alexeyvg
Игорь_UUS
пропущено...


"банальная таблица" - идея ясна... но таблица начнёт "копить данные"... тут сложность, что очень много сессий, у каждого могут быть свои сообщения
"банальная таблица" - это заменитель context_info, в таблице вы можете реализовать точно такую же логику работы, но без ограничения размера.


используя @@SPID? чтоб сообщения разных сессий не путать...
9 янв 19, 16:11    [21780749]     Ответить | Цитировать Сообщить модератору
 Re: Помогите разобраться с переменными MSSQL  [new]
iap
Member

Откуда: Москва
Сообщений: 46535
Игорь_UUS
court
Игорь_UUS,

CONTEXT_INFO - не ?


а как обнулить данную переменную...

DECLARE @context_info varbinary(128) 
SET CONTEXT_INFO @context_info



пишет ошибку: "инструкция SET CONTEXT_INFO требует параметр varbinary (128) NOT NULL."
DECLARE @context_info varbinary(128)=CAST(''AS VARBINARY(128));
SET CONTEXT_INFO @context_info;
?
9 янв 19, 16:30    [21780772]     Ответить | Цитировать Сообщить модератору
 Re: Помогите разобраться с переменными MSSQL  [new]
invm
Member

Откуда: Москва
Сообщений: 8300
Игорь_UUS
но таблица начнёт "копить данные"
Если делать правильно (на основе session_id, login_name, login_time) то ничего копить не будет.
9 янв 19, 16:31    [21780775]     Ответить | Цитировать Сообщить модератору
 Re: Помогите разобраться с переменными MSSQL  [new]
Shakill
Member

Откуда: мск
Сообщений: 1799
Игорь_UUS
а как обнулить данную переменную...

set context_info 0x
9 янв 19, 16:39    [21780788]     Ответить | Цитировать Сообщить модератору
 Re: Помогите разобраться с переменными MSSQL  [new]
Игорь_UUS
Member

Откуда: г. Екатеринбург
Сообщений: 532
Shakill
Игорь_UUS
а как обнулить данную переменную...

set context_info 0x


Спасибо.. работает!
9 янв 19, 16:50    [21780806]     Ответить | Цитировать Сообщить модератору
 Re: Помогите разобраться с переменными MSSQL  [new]
Сон Веры Павловны
Member

Откуда:
Сообщений: 4478
Когда-то меня достаточно аргументированно отговаривали использовать CONTEXT_INFO, и я внял убеждениям, и тоже с тех пор стараюсь его не использовать. Самая первая ХП создает временную таблицу под переменные, вложенные ХП туда пишут, что нужно, при выходе из первой ХП временная таблица самоудаляется - вроде как ничего сложного.
9 янв 19, 17:27    [21780872]     Ответить | Цитировать Сообщить модератору
 Re: Помогите разобраться с переменными MSSQL  [new]
Mike_za
Member

Откуда: Москва
Сообщений: 1166
Сон Веры Павловны,

и ести временная таблица усаствует в джоинах, то получаем гарантированные рекомпиляции на каждом обращении к ней
10 янв 19, 09:58    [21781288]     Ответить | Цитировать Сообщить модератору
 Re: Помогите разобраться с переменными MSSQL  [new]
Сон Веры Павловны
Member

Откуда:
Сообщений: 4478
Mike_za
Сон Веры Павловны,

и ести временная таблица усаствует в джоинах, то получаем гарантированные рекомпиляции на каждом обращении к ней

Ну, если человеку нужен был аналог обычной переменной, только глобальной, и его устроил CONTEXT_INFO, то я как-то сомневаюсь, что вокруг этого всего была выстроена какая-то реляционная логика. Скорее всего, обычная императивщина - прочитать значение, записать значение.
10 янв 19, 10:09    [21781296]     Ответить | Цитировать Сообщить модератору
 Re: Помогите разобраться с переменными MSSQL  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 27523
Игорь_UUS
alexeyvg
пропущено...
"банальная таблица" - это заменитель context_info, в таблице вы можете реализовать точно такую же логику работы, но без ограничения размера.


используя @@SPID? чтоб сообщения разных сессий не путать...
Да.
Но вообще нужно анализировать вашу архитектуру, возможно, вы решаете через переменные такую задачу, которую обычно решают по другому.
Например, общие данные часто хранят в локальных временных таблицах.
Или разбивают одно бизнес-действие на несколько, с согранением соответствующих промежуточных результатов в постоянных таблицах, что даже часто является более натуральным для бизнеса, а объединено было только фантазиями прораммистов.
10 янв 19, 10:18    [21781309]     Ответить | Цитировать Сообщить модератору
 Re: Помогите разобраться с переменными MSSQL  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 6070
Игорь_UUS,

Используйте Output параметр (несмотря на то, что не предлагать!), взаимодействие в хорошей архитектуре должно производиться только через интерфейсы, а не через глобальные переменные. Тем самым вы уменьшаете степень связности и гарантируете, что очередной программист не "забудет" об этой переменной.
10 янв 19, 12:53    [21781484]     Ответить | Цитировать Сообщить модератору
 Re: Помогите разобраться с переменными MSSQL  [new]
Mind
Member

Откуда: Лучший город на Земле
Сообщений: 2149
Владислав Колосов
Игорь_UUS,

Используйте Output параметр (несмотря на то, что не предлагать!), взаимодействие в хорошей архитектуре должно производиться только через интерфейсы, а не через глобальные переменные. Тем самым вы уменьшаете степень связности и гарантируете, что очередной программист не "забудет" об этой переменной.
+1. Глобальные переменные зло. А в SQL-е зло вдвойне.

Простите, Игорь_UUS, но вашу архитектуру надо выкинуть на помойку. В этом потом никто кроме вас не разберется.
10 янв 19, 21:37    [21782200]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить