2012-06-08 2 views
2

Я пытаюсь закодировать триггер SQL Server 2000.Вход в триггер

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

Возможно, мне нужна внутренняя автономная операция, чтобы вставить ее в журнал. Является ли это возможным с T-SQL на SQL Server 2000?

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

ответ

2

Я бы настоятельно рекомендовал не выполнять любую обработку в триггере.

Вы не можете контролировать, когда и как часто срабатывает триггер, поэтому убедитесь, что триггеры очень тонки - не более того, вставьте строку (или несколько строк) в таблицу «audit» или «job to process» , как «маркер» для последующей обработки. Но фактически не запускайте/не выполняйте обработку в триггере.

Обработать фактическую обработку отдельно, используя, например, SQL Agent Job или что-то еще. Поскольку это будет выполняться независимо от вашего исходного утверждения, у вас также не будет проблем с «вложенными» транзакциями и тому подобным.

+0

, спасибо за предложения ур. любые советы о том, как захватить все события, пытающиеся изменить данные определенной таблицы, даже если попытка не удалась. – Andrew

+0

Неверное начало предположения ... убедитесь, что триггер НИКОГДА не сработает. Ошибка в триггере фактически делает невозможным обновление/вставку/удаление данных. Итак ... если вы хотите записать AS WELL в качестве процесса, журнал сделает запись и обработку независимой. Заполните журнал из триггера (это место, гарантирующее, что ведение журнала всегда будет выполнено), затем ИЛИ обрабатывайте журнал на основе времени или смотрите на сервис-брокеров (отправляйте сообщение из триггера). Последний будет И гарантировать непристойность и гарантировать немедленную обработку. – Paul

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