Как передать параметры в триггер?
Самородов Федор Анатольевич: Как передать параметры в триггер?
Триггер выглядит как хранимая процедура без параметров. И, поскольку инициатором запуска триггера является заранее определённое событие, при определении поведения триггера мы обычно опираемся на свойства инициирующего события. Но есть ещё одна возможность повлиять на происходящее в триггере.
Механизм, о котором пойдёт речь, не очень удобен и его использование оправдано, пожалуй, лишь для разного рода хаков и закладок. Для реализации штатного поведения базы данных использовать этот механизм не следует.
"Секретный" канал передачи параметров в процедуры, триггеры, а также между триггерами можно организовать при помощи 128-байтового поля, связанного с текущим контекстом. Это поле можно читать и изменять в любой процедуре и в любом триггере. При помощи команды SET CONTEXT_INFO можно записать данные в контекст, а функция Context_Info () позволит их прочесть.
Вот обыкновенный триггер, который обеспечивает журналирование действий пользователя:
Давайте усовершенствуем этот триггер таким образом, чтобы он позволял регулировать степень подробности журналирования действий пользователя. В начале работы триггера посмотрим, нет ли в контекстной переменной указаний для триггера и, если есть, изменим его поведение:
Теперь инициируем запуск триггера в трёх разных режимах.
Приложение запущено в режиме тестирования. Протоколирование не требуется:
Триггер, обнаружив в контексте указание на режим тестирования не стал ничего протоколировать.
Теперь внесём изменения в базу в штатном режиме, без использования контекстной переменной:
Не обнаружив ничего в контекстной переменной, триггер работает по упрощённой схеме журналирования. То есть добавляет в журнал одну строку с минимумом подробностей.
Проверим теперь как изменится поведение того же самого триггера в отладочном режиме:
Обнаружив режим отладки, тот же самый триггер начинает протоколировать действия приложения более подробно, добавляя в журнал по строке на каждую изменённую строку в таблице.
Таким образом при помощи одного свойства, индивидуального для каждого соединения, можно оказывать влияние на работу всех процедур и триггеров в базе данных. Очевидное применение данной технологии продемонстрировано в этом примере - заложить скрытые возможности для тестирования и отладки базы данных.
Подробнее об этом Вы сможете узнать на курсах SQL Server
Ближайшие группы
Заказ добавлен в Корзину.
Для завершения оформления, пожалуйста,
перейдите в Корзину!
От какого лица вы будете оплачивать обучение?