Уважаемые слушатели! Обращаем ваше внимание, что 01.05.2024 и 09.05.2024 у нас выходные дни. Вы можете оставить сообщение в чате, мы обязательно ответим!

Корзина

Корзина

Частным лицам +7 (495) 232-32-16

Слушателям
от организации
+7 (495) 780-48-44

+7 (495) 780-48-49

Частным лицам +7 (495) 232-32-16

Слушателям
от организации
+7 (495) 780-48-44

+7 (495) 780-48-49

Как передать параметры в триггер?

Самородов Федор Анатольевич: Как передать параметры в триггер?

СФА

Триггер выглядит как хранимая процедура без параметров. И, поскольку инициатором запуска триггера является заранее определённое событие, при определении поведения триггера мы обычно опираемся на свойства инициирующего события. Но есть ещё одна возможность повлиять на происходящее в триггере.

Механизм, о котором пойдёт речь, не очень удобен и его использование оправдано, пожалуй, лишь для разного рода хаков и закладок. Для реализации штатного поведения базы данных использовать этот механизм не следует.

"Секретный" канал передачи параметров в процедуры, триггеры, а также между триггерами можно организовать при помощи 128-байтового поля, связанного с текущим контекстом. Это поле можно читать и изменять в любой процедуре и в любом триггере. При помощи команды SET CONTEXT_INFO можно записать данные в контекст, а функция Context_Info () позволит их прочесть.

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

Триггер, журналирующий действия пользователя

Давайте усовершенствуем этот триггер таким образом, чтобы он позволял регулировать степень подробности журналирования действий пользователя. В начале работы триггера посмотрим, нет ли в контекстной переменной указаний для триггера и, если есть, изменим его поведение:

Триггер, реагирующий на CONTEXT_INFO

Теперь инициируем запуск триггера в трёх разных режимах.

Приложение запущено в режиме тестирования. Протоколирование не требуется:

CONTEXT_INFO - это двоичная строка длиной 128 байтов

Триггер, обнаружив в контексте указание на режим тестирования не стал ничего протоколировать.

Теперь внесём изменения в базу в штатном режиме, без использования контекстной переменной:

По умолчанию поле CONTEXT_INFO пустое

Не обнаружив ничего в контекстной переменной, триггер работает по упрощённой схеме журналирования. То есть добавляет в журнал одну строку с минимумом подробностей.

Проверим теперь как изменится поведение того же самого триггера в отладочном режиме:

CONTEXT_INFO удобно использовать для отладки базы данных

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

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

Подробнее об этом Вы сможете узнать на курсах SQL Server

envelope

Спасибо! Вам на e-mail отправлено письмо со ссылкой для подтверждения

Если письмо не пришло, поищите его в папке со спамом или повторите подписку

email-checked.png

Вы подписались на рассылку

Как будет оформлено обучение?

Оплачивать будет:

Спасибо за обращение! Ваш менеджер свяжется с Вами в течение нескольких минут.