- •Часть 3
- •Часть 3-6. Обеспечение целостности данных Упражнение 1 – Создание новой таблицы и применение ограничений целостности
- •Упражнение 2 – отключение ограничений
- •Часть 3-7. Использование представлений Упражнение 1 – Создание представления
- •Упражнение 2 – создание индексированного представления
- •Упражнение 3 – просмотр системной информации о представлениях
- •Часть 3-8. Создание и использование хранимых процедур Упражнение 1 - Создание хранимой процедуры без параметров
- •Упражнение 2 – создание хранимой процедуры с параметром
- •Упражнение 3 – создание хранимой процедуры с параметрами и значениями по умолчанию
- •Часть 3-9. Создание udf
- •Упражнение 1 - Создание скалярной функции
- •Упражнение 2 - Создание функции, возвращающей табличное значение (I-l t-V udf)
- •Упражнение 3 - Контроль контекста выполнения
- •Часть 3-10. Управление транзакциями и блокировками
- •Упражнение 1 - Применение транзакций
- •Упражнение 2 - Выполнение отката транзакций
- •Упражнение 3 - Просмотр сведений о блокировках
- •Упражнение 4 - Настройка параметров блокировки
- •Часть 3-11. Создание триггеров
- •Упражнение 1 - Создание новой таблицы
- •Упражнение 2 - Создание триггера для таблицы
- •Упражнение 3 – Проверка работы триггера
- •Упражнение 4 – Создание триггера на обновление и вставку
Упражнение 3 – Проверка работы триггера
Проверим работу триггера. Выполним следующую команду:
USE AdventureWorks
GO
DELETE FROM HumanResources.JobCandidate
WHERE JobCandidateID =
(SELECT MIN(JobCandidateID)FROM HumanResources.JobCandidate )
Рис. 3. Проверка
В результате срабатывания триггера на удаление данные о кандидате должны быть скопированы в таблицу. Выолним запрос:
SELECT *
FROM HumanResources.JobCandidateHistory
Рис. 4. Результат
Удалим данные из таблицы, выполнив команду:
TRUNCATE TABLE [HumanResources].[JobCandidateHistory]
Рис. 5. Удаление данных из таблицы
Упражнение 4 – Создание триггера на обновление и вставку
Создадим триггер OrderDetailNotDiscontinuedна таблицуSales.SalesOrderDetail. Этот триггер должен отвергать попытки ввода заказов на товары, прием которых на склад прекращен. Информация о прекращении поставок находится в таблицеProduction.Product. Если поставки товара прекращены, то значение поляDiscontinuedDateбудет иметь значение отличное отNULL. При попытке заказать таой товар триггер должен выдать сообщение с помощью командыRAISERRORи откатить транзакцию.
Рис. 6. Результат
Выполним проверку триггера. В базу данных необходимо ввести хотя бы одну строку, при обнаружении которой во время выполнения кода триггера должна активироваться ошибка.
Изначально на запрос данных нет, поэтому выполняем два запроса по порядку:
Рис.7. Изменения
Далее выполняем запрос
USE AdventureWorks
GO
SELECT ProductID, Name
FROM Production.Product
WHERE DiscontinuedDate is NOT NULL
Рис. 8. Проверка подходящих данных
Контрольная проверка работы триггера. Выполняем запрос:
Insert Sales.SalesOrderDetail
(SalesOrderID,OrderQty,ProductID,SpecialOfferID,UnitPrice,UnitPriceDiscount)
VALUES (43660,5,680,1,1431,0)
Рис. 10. Проверка работы. Сообщение об ошибке
В результате чего, попытка ввода недопустимых данных была отвергнута
Вывод: В ходе лабораторной работы мы познакомились с особенностями триггеров. Был выполнен ряд упражнений: создание триггера для таблиц, создание триггера на обновление и вставку и выполнение проверки их работы.