2017-01-25 2 views
0

Выполняет SQL-задание, в котором отключается триггер для всех таблиц в конкретном БД. Но несколько триггеров снова включаются через «другой скрипт», который запускается из приложения/веб-службы. Как я могу гарантировать, что триггеры не будут активированы до завершения задания SQL?Как отключить триггеры в SQL Server 2012 во время сеанса

ответ

1

Похоже, вы хотите, чтобы сеанс был защищен от действия триггера, а не отключать триггеры (которые будут отключать их для всех сеансов), пока этот сеанс работает. Если это так, и если возможны повторные записи, я бы предложил использовать контекстную информацию.

что вы делаете, в рамках сессии, которая должна быть иммунной, установить конкретное значение контекста, например:

SET CONTEXT_INFO 0x53494C4C59 

Затем в ваших триггеров, прежде чем делать что-нибудь еще, проверьте и выход:

IF CONTEXT_INFO() = 0x53494C4C59 
BEGIN 
    RETURN 
END 

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

+0

Спасибо Damien! Попробуем этот вариант. Является ли это значение контекста чем-нибудь? Или это просто случайное число, и я могу использовать любое число? –

+0

@RajeshBhat - вы можете использовать любое число. Я обычно придумываю какой-то фрагмент текста, а затем конвертирую его в двоичный. Например, «выберите CONVERT (varbinary (128),« SILLY »)' - но вы, вероятно, захотите что-то более подходящее/отличительное. –

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