- •Часть 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 – Создание триггера на обновление и вставку
Упражнение 4 - Настройка параметров блокировки
Открываем файл Lock2.sql. Смотрим содержимое файла. Выполняем запрос.
Рис. 8
Открываем файл LockList.sql и выполняем запрос.
В столбце request_stetus появилась запись WAIT, указывающая на ожидание вторым запросом предоставления блокировки, прежде чем будет продолжено его выполнение.
SELECT resource_type, request_mode,request_type, request_status, request_session_id
FROM sys.dm_tran_locks
Рис. 9
Установим таймаут блокировки. Добавим следующую команду перед командой BEGIN TRANSACTION :
SET lock_timeout 5000
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE
SET lock_timeout 5000
BEGIN TRANSACTION
SELECT * FROM Person.Contact WHERE ContactID = 10
UPDATE Person.Contact SET FirstName = 'Frances' WHERE ContactID = 6
-- For the purpose of the exercise, COMMIT TRANSACTION or ROLLBACK TRANSACTION are not used.
SELECT @@spid AS 'SPID'
-- Use the SPID to identify the connection when using sp_lock.
-- ROLLBACK TRANSACTION
Рис. 10. Таймаут блокировки
Вывод: В ходе лабораторной работы мы получили представление о транзакциях и блокировках. Научились их применять в запросах, выполнять откат транзакций и просматривать сведения о блокировках через Монитор активности . Также научились настраивать параметры блокировки на примере установки таймаута блокировки.
Часть 3-11. Создание триггеров
Цель работы: Научиться создавать триггеры. В этой работе применяется база данных
Упражнение 1 - Создание новой таблицы
Написать и выполнить следующую команду:
USE [AdventureWorks]
GO
CREATE TABLE [HumanResources].[JobCandidateHistory](
[JobCandidateID] [int] NOT NULL UNIQUE,
[Resume] [xml] NULL,
[Rating] [int] NOT NULL CONSTRAINT [DF_JobCandidateHistory_Rating]
Default (5),
[RejectedDate] [datetime] NOT NULL,
[ContactID] [int] NULL,
CONSTRAINT [FK_JobCandidateHistory_Contact_ContactID]
FOREIGN KEY(ContactID) REFERENCES [Person].[Contact] (ContactID),
CONSTRAINT [CK_JobCandidateHistory_Rating]
CHECK ([Rating]>=0 AND [Rating]<=10)
) ON [PRIMARY]
Рис. 1. Выполнение запроса
Упражнение 2 - Создание триггера для таблицы
Создать триггер для таблицы JobCandidateсхемыHumanResources. Создадём триггерdJobCandidate. Триггер должен вставлять данные в таблицуJobCandidateHistoryпосле выполнения удаления данных из таблицыJobCandidate. Триггер копирует сведения о кандидате, если их кто-нибудь удалит. Необходимо копировать столбцыJobCandidateIDиResume. В полеRejectedDateнадо записать текущую дату с помощью функцииGetDate(). В столбцеRatingследует оставить значение по умолчанию, а столбцуContactIDприсвоить значениеNULL.
CREATE TRIGGER dJobCandidate ON HumanResources.JobCandidate
AFTER DELETE
AS
BEGIN
SET NOCOUNT ON;
INSERT INTO
[HumanResources].[JobCandidateHistory] (JobCandidateID, Resume,
RejectedDate)
SELECT
JobCandidateID, Resume ,getdate()
FROM
deleted
END;
Рис. 2