Сравнительное изучение уведомлений о событиях и триггеров
В следующей таблице сравниваются триггеры и уведомления о событиях и выявляются различия между ними.
ТРИГГЕРЫ |
УВЕДОМЛЕНИЯ О СОБЫТИЯХ |
---|---|
Триггеры DML срабатывают в ответ на события языка DML. Триггеры DDL срабатывают в ответ на события языка DDL. |
Уведомления о событиях срабатывают в ответ на события языка DDL и подмножество событий трассировки SQL. |
Триггеры могут выполнять управляемый код Transact-SQL или CLR. |
Уведомления о событиях не могут выполнять код. Вместо этого они отправляют сообщения xml службе Service Broker. |
Триггеры обрабатываются синхронно в области действия транзакций, вызвавших их срабатывание. |
Уведомления о событиях могут обрабатываться асинхронно и не выполняются в области действия транзакций, вызвавших их срабатывание. |
Потребитель триггера тесным образом связан с событием, вызвавшим срабатывание триггера. |
Потребитель уведомления о событии не связан с событием, вызвавшим срабатывание триггера. |
Триггеры должны обрабатываться на локальном сервере. |
Уведомления о событиях могут обрабатываться на удаленном сервере. |
Для триггеров можно выполнить откат. |
Откат уведомлений о событиях невозможен. |
Имена триггеров DML находятся в области видимости схемы. Имена триггеров DDL находятся в области видимости базы данных или сервера. |
Имена уведомлений о событиях находятся в области видимости сервера или базы данных. Уведомления о событии QUEUE_ACTIVATION находятся в области видимости определенной очереди. |
Триггеры DML принадлежат тому же владельцу, что и таблицы, к которым они применяются. |
Уведомление о событии для очереди может принадлежать владельцу, отличному от владельца объекта, к которому оно применяется. |
Триггеры поддерживают предложение EXECUTE AS. |
Уведомления о событиях не поддерживают предложение EXECUTE AS. |
Сведения о событии триггера DDL могут быть захвачены с использованием функции EVENTDATA, которая возвращает тип данных xml. |
Уведомления о событиях направляют данные о событии в формате XML службе Service Broker. Данные форматируются по той же схеме, что и функция EVENTDATA. |
Метаданные о триггерах отображаются в представлениях каталога sys.triggers и sys.server_triggers. |
Метаданные об уведомлениях о событиях отображаются в представлениях каталога sys.event_notifications и sys.server_event_notifications. |