Студопедия  
Главная страница | Контакты | Случайная страница

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатика
ИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханика
ОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторика
СоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансы
ХимияЧерчениеЭкологияЭкономикаЭлектроника

Примеры использования триггера

Читайте также:
  1. II. Оценка эффективности использования основных средств
  2. III. Первоначальное накопление капитала (особенности, примеры)
  3. Альтернативные затраты (издержки) затраты, связанные с невозможностью наилучшего использования ресурсов.
  4. Анализ и оценка влияния использования труда на себестоимость продукции.
  5. Анализ использования прибыли
  6. Анализ использования прибыли
  7. Анализ использования производственной мощности
  8. Анализ использования трудовых ресурсов 2013 году
  9. Анализ лучшего и наиболее эффективного использования.
  10. Анализ наиболее эффективного использования.

Создадим для таблицы authsmall триггер типа DELETE, который будет выводить информацию о попытках удаления и количестве удаляемых строк.

CREATE TRIGGER auth_de1 ON authsmall

FOR DELETE AS

PRINT 'Попытка удаления '+STR(@@ROWCOUNT)+' строк из таблицы authsmall'

PRINT 'Пользователь '+CURRENTUSER

IF CURRENTUSER!= 'dbo'

BEGIN

PRINT 'Удаление запрещено' ROLLBACK TRANSACTION

END ELSE

PRINT 'Удаление разрешено'

Созданный триггер будет выводить информацию о количестве строк, которое пытается удалить пользователь, и имя пользователя, выполнившего команду DELETE. Если пользователь не ' dbo', то удаление запрещается и выдается соответствующее предупреждение.

Выполним следующую команду:

DELETE FROM authsmall WHERE au_fname='Johnson'.

Или

DELETE FROM authsmall WHERE 2*2=5

Создание триггера, который будет разрешать изменение столбца au_id всем, кроме dbo:

CREATE TRIGGER auth_upd_1 ON authsmall FOR UPDATE AS SET NOCOUNT ON

PRINT 'Попытка изменения данных в таблице authsmall'

IF (COLUMNS_UPDATED() & 1)!=0

PRINT 'Изменение столбца au_id'

IF (COLUMNS_UPDATED() & 2)!=0

PRINT 'Изменение столбца au_fname'

IF (COLUMNS_UPDATED() & 4)!=0

PRINT 'Изменение столбца au_lname'

IF UPDATE(phone)

PRINT 'Изменение столбца phone'

IF (CURRENTUSER ='dbo') AND (COLUMNS_UPDATED() & 1)!=0)

BEGIN

PRINT 'Пользователь dbo не может изменять идентификационный номер автора'

ROLLBACK TRANSACTION

END

Попытаемся выполнить изменение телефона и имени автора:

UPDATE authsmall SET phone = '415 986-7020',

au_fname ='John' WHERE au_lname = 'Green'

Или

UPDATE authsmall SET phone = '913 843-7302',

au_id ='748-12-6859' WHERE au_lname = 'Smith'

Создадим триггер, который запретит удаление авторов, которые уже подписали контракт или проживают вне штата Калифорния:

CREATE TRIGGER auth_del ON authors

FOR DELETE AS

DECLARE @@Result int

SET @@Result = 1

IF EXISTS (SELECT * FROM deleted WHERE contract=l)

BEGIN

PRINT ('Попытка удаления автора с подписанным контрактом')

SET @@Result = 0

END

IF EXISTS (SELECT * FROM deleted WHERE state!= 'CA')

BEGIN

PRINT ('Попытка удаления автора, проживающего вне Калифорнии')

SET @@Result = 0

END

IF @@Result = 0

BEGIN

PRINT 'Удаление запрещено**' ROLLBACK TRANSACTION

END

В триггере пришлось ввести локальную переменную @@Result, которая играет роль флага неудачного выполнения удаления.

Выполним следующий запрос:

DELETE FROM authsmall

Будет получен следующий результат:

Попытка удаления автора с подписанным контрактом. Попытка удаления автора, проживающего вне Калифорнии. Удаление запрещено.

Или

DELETE FROM authsmall WHERE city = 'Vacaville'

В качестве примера рассмотрим создание триггера для таблицы auth2, которое создается с помощью следующей команды:

CREATE TRIGGER auth2_trg ON auth2

INSTEAD OF INSERT, UPDATE, DELETE AS

SELECT * FROM inserted

Выполним следующие запросы.

INSERT INTO auth2

VALUES ('123-45-6789', 'Lock', 'Mack')

Результат:

au_id au_lname au_fname

123-45-6789 Lock Mack

(1 row(s) affected)

Варианты лабораторных заданий

  1. Для созданной в лабораторной работе № 2 таблицы разработать триггер, запускаемый при удалении строки таблицы. Удаленная строка должна быть переписана во вспомогательную таблицу. Произвести несколько удалений строк в основной таблице и просмотреть содержимое вспомогательной таблицы.
  2. Разработать триггер, запускаемый при занесении новой строки в таблицу. Триггер должен увеличивать счетчик числа добавленных строк.
  3. Разработать триггер, запускаемый при модификации таблицы. Триггер должен заносить в журнал (вспомогательную таблицу) информацию о времени модификации и имени пользователя, производившего модификацию таблицы.
  4. Получить информацию о триггере

Литература

  1. Шкарина Л. Язык SQL: учебный курс.-CПб.:Питер,2001.-592с.:ил.
  2. Дубинин В. Работа с базами данных в архитектуре клиент-сервер: Метод. указания к выполнению лабораторных работ. – Пенза: Изд-во Пенз. гос. ун-та. – 2000. – 91 с

 




Дата добавления: 2014-12-19; просмотров: 35 | Поможем написать вашу работу | Нарушение авторских прав




lektsii.net - Лекции.Нет - 2014-2024 год. (0.006 сек.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав