powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Сессионные переменные в тригере
24 сообщений из 24, страница 1 из 1
Сессионные переменные в тригере
    #39704214
_Groxot_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Доброго дня.
Есть задумка вызывать тригер только один раз за сессию (проверять при старте триггера, не вызывался ли он уже сегодня)
Проверку сделать максимально простой чтобы не кушала время и ресурсы.

Есть ли варианты писать сессионные переменные чтобы они шарились между разными вызовами триггера?
В 2016 есть sp_set_session_context но мне нужна поддержка 2000 в худшем случае 2008
...
Рейтинг: 0 / 0
Сессионные переменные в тригере
    #39704219
aleks222
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Таблица - лучшая переменная.
...
Рейтинг: 0 / 0
Сессионные переменные в тригере
    #39704224
_Groxot_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aleks222,

Каждый раз её проверять на наличие записи с условиями (пользователь, дата) будет накладно
...
Рейтинг: 0 / 0
Сессионные переменные в тригере
    #39704234
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Groxot_aleks222,

Каждый раз её проверять на наличие записи с условиями (пользователь, дата) будет накладно
сессия же, ничего накладного
...
Рейтинг: 0 / 0
Сессионные переменные в тригере
    #39704243
_Groxot_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TaPaK,

Код: sql
1.
2.
3.
4.
5.
6.
IF OBJECT_ID('tempdb..#ISCLEARED') IS NULL BEGIN
	CREATE TABLE #ISCLEARED (flag bit)
	Insert into #ISCLEARED (flag) values (1)
// логика
END
GO
...
Рейтинг: 0 / 0
Сессионные переменные в тригере
    #39704249
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Groxot_,

что это?
статическая таблийца SPID, Flag
...
Рейтинг: 0 / 0
Сессионные переменные в тригере
    #39704255
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Groxot_Есть задумка вызывать тригер только один раз за сессию (проверять при старте триггера, не вызывался ли он уже сегодня)Так за сессию или за сегодня?

Если за сессию, то добавьте в начало триггера примерно такое:
Код: sql
1.
2.
3.
4.
5.
6.
declare @tablename sysname = N'##MyTrigger' + cast(@@spid as nvarchar(10));

if object_id(N'tempdb..' + @tablename) is not null
 return;

exec(N'create table ' + @tablename + N' (dummy int)');



ЗЫ: Лучше бы решаемую задачу озвучили - может найдется не столь экзотический вариант решения.
...
Рейтинг: 0 / 0
Сессионные переменные в тригере
    #39704260
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TaPaK_Groxot_,

что это?
статическая таблийца SPID, FlagА что, надёжный и простой способ, проще, чем со статической таблицей (там ещё нужно время создания сессии сохранять и сравнивать, да плюс помнить о блокировках)

_Groxot_В 2016 есть sp_set_session_context но мне нужна поддержка 2000 в худшем случае 2008Ещё есть set context_info, работает во всех версиях.
Итого, самые удобные варианты - либо временная таблица, либо context_info
...
Рейтинг: 0 / 0
Сессионные переменные в тригере
    #39704265
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторЕсть задумка вызывать тригер только один раз за сессию (проверять при старте триггера, не вызывался ли он уже сегодня)
сегодня и сессия на временных объектах не решить
...
Рейтинг: 0 / 0
Сессионные переменные в тригере
    #39704275
_Groxot_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
invm,
сессия
...
Рейтинг: 0 / 0
Сессионные переменные в тригере
    #39704278
_Groxot_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TaPaK,

сегодня = в пределах текущей сессии
...
Рейтинг: 0 / 0
Сессионные переменные в тригере
    #39704280
_Groxot_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexeyvg,

Какова вероятность что этот SET CONTEXT_INFO кто то потрет?
Используют ли его, например ADO, в собственных целях?
...
Рейтинг: 0 / 0
Сессионные переменные в тригере
    #39704286
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Groxot_invm,
сессияТогла либо через context_info, либо как я показал.
Через локальную временную таблицу не выйдет - помрет при завершении триггера.
Через статическую таблицу - дополнительные приседания для ее очистки.
...
Рейтинг: 0 / 0
Сессионные переменные в тригере
    #39704289
_Groxot_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
invm,

временная глобальная с именем сессии судя по всему мой варинат, спасибо.
контекст кто то трет у меня (Delphi компонент видать какой)
...
Рейтинг: 0 / 0
Сессионные переменные в тригере
    #39704295
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
действительно, динамика + беконечное создание временных таблиц sql-ю понравится, особенно в тенденции проблем как раз с массовым созданием этих самых временных таблиц
...
Рейтинг: 0 / 0
Сессионные переменные в тригере
    #39704307
aleks222
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TaPaKдействительно, динамика + беконечное создание временных таблиц sql-ю понравится, особенно в тенденции проблем как раз с массовым созданием этих самых временных таблиц

Это фсе ерунда. На фоне connection pool и приложения, которое пользует этот connection pool.

ЗЫ. Триггеры не должны зависеть от "сессии".
...
Рейтинг: 0 / 0
Сессионные переменные в тригере
    #39704329
_Groxot_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aleks222,

почему не должен?
...
Рейтинг: 0 / 0
Сессионные переменные в тригере
    #39704498
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Groxot_alexeyvg,

Какова вероятность что этот SET CONTEXT_INFO кто то потрет?
Используют ли его, например ADO, в собственных целях?Нет, никто не использует.

invmЧерез локальную временную таблицу не выйдет - помрет при завершении триггера.Понятно, это только если создавать её каждый раз при создании сессии на клиенте.
Это, наверное, совсем не оптимально, разве что триггер срабатывает в каждой сессии.
...
Рейтинг: 0 / 0
Сессионные переменные в тригере
    #39704538
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexeyvgПонятно, это только если создавать её каждый раз при создании сессии на клиенте.Тогда уж лучше постоянную таблицу. По крайней мере не будет зависеть от клиента.
...
Рейтинг: 0 / 0
Сессионные переменные в тригере
    #39704549
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
invmalexeyvgПонятно, это только если создавать её каждый раз при создании сессии на клиенте.Тогда уж лучше постоянную таблицу. По крайней мере не будет зависеть от клиента.Это да.
А ещё лучше - контекст.
...
Рейтинг: 0 / 0
Сессионные переменные в тригере
    #39704591
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexeyvgА ещё лучше - контекст.Насколько я помню, добыть контекст на 2000-м было довольно затратно по времени.
...
Рейтинг: 0 / 0
Сессионные переменные в тригере
    #39704634
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
invmalexeyvgА ещё лучше - контекст.Насколько я помню, добыть контекст на 2000-м было довольно затратно по времени.Хм, вот что то не помню такого, хотя мы широко использовали, и к перформансу относились внимательно (даже если это было не нужно)...
Кстати, контекст же можно получить не только функцией, но и из sysprocesses, может, что то из них работало быстро?
...
Рейтинг: 0 / 0
Сессионные переменные в тригере
    #39704717
tunknown
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Groxot_Есть задумка вызывать тригер только один раз за сессию (проверять при старте триггера, не вызывался ли он уже сегодня)
Проверку сделать максимально простой чтобы не кушала время и ресурсы.

Если среда исполнения полностью контролируемая, нет сторонних разработчиков и доступно изменение инициализации сессии, то можно использовать такие варианты, если их настройка не повлияет на выполняемое до триггера.
Запомнить предыдущее значение. Установить самом начале соединения свою "константу". В триггере проверить её. Потом вернуть предыдущее значение.
Код: sql
1.
2.
3.
select @@LOCK_TIMEOUT
SET LOCK_TIMEOUT 1234567890
select @@LOCK_TIMEOUT

или
Код: sql
1.
2.
3.
SELECT @@LANGID,@@LANGUAGE
SET LANGUAGE 'русский'
select * from syslanguages


Производительность метода мне неизвестна.
...
Рейтинг: 0 / 0
Сессионные переменные в тригере
    #39704755
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexeyvgХм, вот что то не помню такого, хотя мы широко использовали, и к перформансу относились внимательно (даже если это было не нужно)...
Кстати, контекст же можно получить не только функцией, но и из sysprocesses, может, что то из них работало быстро?Да вот отложилось в памяти, что были проблемы с производительностью. А вот подробности не отложились :)
...
Рейтинг: 0 / 0
24 сообщений из 24, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Сессионные переменные в тригере
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]