Дәріс 8- microsoft sql server функцияны орындау. Функциямен жұмыс. Детерменленген және детерменленбеген функциялар


• репликацияны қолдау. Триггер құру синтаксисі



бет5/5
Дата05.05.2023
өлшемі79,3 Kb.
#90602
1   2   3   4   5
Байланысты:
Дәріс 9

репликацияны қолдау.

Триггер құру синтаксисі

Негізгі 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


Достарыңызбен бөлісу:
1   2   3   4   5




©emirsaba.org 2024
әкімшілігінің қараңыз

    Басты бет