4. Создание таблицы «Протокол»
Создайте в базе данных таблицу Протокол со структурой, приведенной ниже.
Номер |
ДатаВремя |
Пользователь |
Действие |
ЧислоСтрок |
. . . |
. . . |
. . . |
. . . |
. . . |
Здесь столбец Номер является автоинкрементным первичным ключом. В столбце Действие будет указываться одна из трех возможных операций с данными: «Вставка», «Обновление», «Удаление». Столбец ЧислоСтрок будет содержать данные о числе вставленных, либо обновленных, либо удаленных строк.
/*Создание таблицы Протокол*/
CREATE TABLE Протокол
(Номер INT IDENTITY(1,1) PRIMARY KEY,
ДатаВремя DATETIME DEFAULT getdate() NULL,
Пользователь VARCHAR(20) NOT NULL,
Действие VARCHAR(10) NOT NULL
CHECK (Действие='Обновление' OR Действие='Вставка' OR Действие='Удаление'),
ЧислоСтрок INT NOT NULL CHECK (ЧислоСтрок >= 0))
GO
Рисунок 9 - Таблица «Протокол»
5. Создание триггеров к таблице «Студент»
Создайте триггер, связанный с конкретной таблицей базы данных, который предназначен для автоматической фиксации в таблице Протокол всех действий, вызванных вставкой, обновлением или удалением данных в таблице, снабженной триггером. Каждая SQL-команда, изменяющая содержимое этой таблицы, должна быть отражена отдельной строкой в таблице Протокол.
/*Создание триггера для автоматической фиксации в таблице Протокол (Вставка)*/
CREATE TRIGGER tu_insert
ON студент
FOR INSERT
AS
DECLARE @count INT
SELECT @count = COUNT(*) FROM INSERTED
INSERT INTO Протокол (Пользователь, Действие, ЧислоСтрок)
VALUES(SUSER_SNAME(), 'Вставка', @count)
GO
/*Создание триггера для автоматической фиксации в таблице Протокол (Удаление)*/
CREATE TRIGGER tu_delete
ON студент
FOR DELETE
AS
DECLARE @count INT
SELECT @count = COUNT(*) FROM DELETED
INSERT INTO Протокол (Пользователь, Действие, ЧислоСтрок)
VALUES(SUSER_SNAME(), 'Удаление', @count)
GO
/*Создание триггера для автоматической фиксации в таблице Протокол (Обновление)*/
CREATE TRIGGER tu_update
ON студент
FOR UPDATE
AS
DECLARE @count INT
SELECT @count = COUNT(*) FROM INSERTED
INSERT INTO Протокол (Пользователь, Действие, ЧислоСтрок)
VALUES(SUSER_SNAME(), 'Обновление', @count)
GO
/*Проверка работоспособности триггера*/
DELETE FROM студент WHERE СреднийБалл=6.9
INSERT INTO студент
VALUES ('4', '1', 'Петров Андрей Сергеевич', '15.04.1986','г.Бобруйск, ул. Лесная, д.3, кв.12', 'М', '8.0')
UPDATE студент SET ДатаРождения = getdate() WHERE СреднийБалл>8
SELECT * FROM Протокол
GO
Рисунок 10 – Результат работы триггера
Список использованных источников
-
BPwin и ERwin. CASE-средства разработки информационных систем. / Маклаков С.В. – М., 1999.
-
http://msdn.microsoft.com/ru-ru/library/bb510741.aspx – cправочник по Transact-SQL.
-
MS SQL Server 2000: управление и программирование. / Пирогов В.Ю. – СПб., 2005.
-
Визуальные и программные средства проектирования реляционных баз данных / А.А.Бутов, И.Г. Орешко, Е.А. Шестаков – Мн., 2009.
-
Язык SQL. Учебный курс. / Шкарина Л. – СПб., 2003.