Негізгі CREATE TRIGGER команда форматы төменде көрсетілген:
CREATE TRIGGER триггер_аты
BEFORE | AFTER <триггер_жағдай>
ON <кесте_аты>
[REFERENCING <жаңа_немесе_ескі_кластар_тізімі>]
[FOR EACH { ROW | STATEMENT}]
[WHEN (триггер_шарты) ]
<триггер_түрі>
Мысалы
В приведенном ниже примере триггер выполняется всегда, когда в таблицу Sales вставляется строка или выполняется ее модификация. Если дата заказа не находится в пределах первых 15 дней месяца, строка в таблицу не вводится.
CREATE TRIGGER Tri_Ins_Sales ON Sales FOR INSERT, UPDATE AS /* Объявить необходимые локальные переменные */ DECLARE @nDayOfMonth TINYINT /* Найти информацию о добавленной записи */ SELECT @nDayOfMonth = DatePart (day, i.ord_date) FROM Sales s, Inserted i WHERE s.stor_id = i.stor_id AND s.ord_num = i.ord_num AND s.title_id = i.title_id /* Проверить критерий отказа и в случае необходимости послать сообщение об ошибке */ IF @nDayOfMonth > 15 BEGIN /* Примечание: всегда сначала производите откат. Вы можете не знать, какого рода ошибка обработки произошла, что может вызвать неоправданно продолжительное время блокировки */ ROLLBACK TRAN RAISERROR('Выполняются только заказы, поданные в первые 15 дней месяца', 16, 10 ) END
В следующем примере использование переменной @@ROWCOUNT позволяет предотвратить удаление более одной строки. Этот триггер выполняется всегда, когда пользователь пытается удалить строку из таблицы Stores. Если информация касается продаж, то триггер препятствует выполнению этого запроса.
CREATE TRIGGER Tri_Del_Stores ON Stores FOR DELETE AS /* Проверка количества модифицируемых строк и запрещение удаления более одной строки за один раз */ IF @@ ROWCOUNT > 1 BEGIN ROLLBACK TRAN RAISERROR ('За один раз можно удалить только одну строку.', 16, 10 ) END /* Объявление временной переменной для сохранения уничтожаемой информации */ DECLARE @ StorID char (4) /* Получение значения удаляемой строки */ SELECT @StorID = d.stor_id FROM Stores s, Deleted d WHERE s.stor_id *= d.stor_id IF EXISTS (SELECT * FROM Sales WHERE stor_id = @storID) BEGIN ROLLBACK TRAN RAISERROR ('Эта информация не может быть удалена, поскольку имеется соответствующая запись в таблице Sales.', 16, 10) END