Триггеры

Этот раздел посвящен механизму, называемому триггерами. В начале главы описываются операторы Transact-SQL для создания, удаления и изменения триггеров. После этого даются примеры из различных областей приложений для этого объекта базы данных. Каждый пример создается с использованием одного из операторов insert, update или delete. Во второй части этой главы рассматриваются триггеры DDL, которые базируются на таких операторах, как create table. Опять же, даются примеры из различных областей приложений, связанных с триггерами DDL.

Оценить
(1 голос)
Триггер является механизмом, который выполняется, когда происходит конкретное действие с отдельной таблицей. Каждый триггер имеет три основные части: ♦ имя; ♦ действие; ♦ исполнение. Максимальный размер имени триггера- 128 байтов. Действием триггера может быть либо оператор DML (insert, update или delete), либо оператор DDL. Поэтому существуют две формы триггеров: триггеры DML и триггеры DDL. Исполнительная часть триггера обычно содержит хранимую процедуру или пакет.
Оценить
(2 голоса)
Триггер создается посредством оператора create trigger, который имеет следующий синтаксис: create trigger [schema_name.] trigger_name on {table_name I view_name} [with dml_trigger_option {,  ...]] {for I after |  instead of} {[insert]   [,]   [update] [,] [delete]} [with append] [as sql_statement \ external name method_name} Здесь schema_name- имя схемы, которой принадлежит триггер; trigger_ name- имя триггера; tabie_name- имя таблицы, для которой задается триггер. Для представлений также поддерживаются триггеры, как показано в варианте view_name. Опции after и instead of являются двумя дополнительными опциями, которые вы можете задать в триггере. (Предложение for является синонимом для after.) Триггеры after вызываются после появления действий, обрабатываемых в триггерах. Триггеры…
Оценить
(0 голоса)
Transact-SQL также поддерживает оператор alter trigger, который изменяет структуру триггера. Данный оператор обычно используется для изменения тела триггера. Все предложения и опции оператора alter trigger соответствуют предложениям и опциям с теми же именами в операторе create trigger. Полномочия для alter trigger по умолчанию предоставлены членам фиксированных ролей базы данных db_owner и db_ddiadmin, а также владельцу таблицы. Оператор drop trigger удаляет один или более существующих триггеров из текущей базы данных. В следующем разделе описываются удаляемые и добавляемые таблицы, которые играют значительную роль в действиях триггеров.
Оценить
(1 голос)
При создании синхронизирующего действия в триггере вы обычно должны указать, на какое значение столбца вы ссылаетесь - на значение, которое столбец имел до выполненного изменения или после изменения. По этой причине для проверки нужных значений создаются две виртуальные таблицы со специальными именами: ♦ deleted содержит копии строк, которые были удалены из таблицы; ♦ inserted содержит копии строк, которые были добавлены в таблицу. Структура этих таблиц эквивалентна тем таблицам, для которых задан триггер. Таблица deleted используется, если в операторе create trigger задано предложение delete или update. Таблица inserted используется, если в операторе create trigger задано предложение insert или update. Это означает,…
Оценить
(0 голоса)
В первой части этой главы было сказано, как вы можете создавать триггеры DML и изменять их структуру. Такая форма триггеров может быть использована для решения многих проблем. В данном разделе описываются некоторые области приложений для триггеров DML (триггеры after и instead of).
Оценить
(0 голоса)
Как вы уже знаете, триггеры after вызываются после того, как будут выполнены действия. Вы можете задать триггер after, используя ключевое слово after или for. Триггеры after могут быть созданы только для базовых таблиц. Триггеры after могут быть использованы, помимо прочего, для выполнения следующих действий: ♦ создание контрольного журнала выполненных действий для одной или более таблиц базы данных (см. пример 14.1); ♦ реализация бизнес-правил (см. пример 14.2); ♦ поддержание ссылочной целостности данных (см. примеры 14.3 и 14.4).
Оценить
(0 голоса)
В главе 12 рассказано, как вы можете перехватывать изменения данных, используя механизм, называемый CDC (change data capture, перехват изменения данных). Триггеры DML также могут быть использованы для решения той же задачи. В примере 14.1 показано, как триггеры могут создавать контрольный журнал, содержащий сведения о действиях с одной или более таблиц базы данных.   В примере 14.1 показано, как триггеры могут быть использованы для реализации контрольного журнала о действиях с таблицей. В этом примере создается таблица auditbudget, которая сохраняет все изменения в столбце budget таблицы project. Запись всех изменений в этом столбце будет выполнена при использовании триггера modify_budget. Любое изменение столбца…
Оценить
(0 голоса)
Триггеры могут быть использованы для создания бизнес-правил приложений. В примере 14.2 показано создание подобного триггера.     В примере 14.2 создается правило, управляющее изменениями бюджета проектов. Триггер totai_budget проверяет каждое изменение бюджета и выполняет только такие операторы update, в которых изменения не увеличивают сумму всех бюджетов более чем на 50%. В противном случае для оператора update выполняется откат с использованием оператора rollback transaction.
Оценить
(0 голоса)
Как было сказано, СУБД обрабатывают два типа ограничений целостности: ♦ декларативные ограничения целостности, определенные с помощью операторов create table и alter table; ♦ процедурные ограничения целостности (обрабатываемые триггерами). Использование триггеров для поддержания ограничений целостности имеет одно значительное преимущество: триггеры являются более гибкими, чем декларативные ограничения, потому что каждое ограничение может быть реализовано при помощи триггеров. (То же утверждение не является верным для декларативных ограничений.) В примере 14.3 показано, как вы можете поддерживать ссылочную целостность для таблиц employee и works_on.   Триггер workson_integrity в примере 14.3 проверяет ссылочную целостность для таблиц employee и works_on. Это означает, что проверяется каждое изменение значения…
Оценить
(1 голос)
Триггер с предложением instead of заменяет соответствующее действие, заданное для триггера. Он выполняется после создания соответствующих таблиц deleted и inserted, но до того, как будут выполнены ограничения целостности данных и любые другие действия. Триггеры instead of могут быть созданы как для таблиц, так и для представлений. Когда оператор Transact-SQL ссылается на представление, у которого существует триггер instead of, система базы данных выполняет этот триггер, вместо выполнения любых других действий. Триггер всегда использует информацию таблиц deleted и inserted, созданных для представления, чтобы создавать любые операторы, необходимые для создания запрашиваемых событий. Существуют некоторые требования к значениям столбцов, поставляемым триггерам instead of: ♦…
«ПерваяПредыдущая12СледующаяПоследняя»
Навигация
© 2021 serversql.ru. Все права защищены.