Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Базы данных (вариант 26).doc
Скачиваний:
59
Добавлен:
01.04.2014
Размер:
1.82 Mб
Скачать

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 – Результат работы триггера

Список использованных источников

  1. BPwin и ERwin. CASE-средства разработки информационных систем. / Маклаков С.В. – М., 1999.

  2. http://msdn.microsoft.com/ru-ru/library/bb510741.aspx – cправочник по Transact-SQL.

  3. MS SQL Server 2000: управление и программирование. / Пирогов В.Ю. – СПб., 2005.

  4. Визуальные и программные средства проектирования реляционных баз данных / А.А.Бутов, И.Г. Орешко, Е.А. Шестаков – Мн., 2009.

  5. Язык SQL. Учебный курс. / Шкарина Л. – СПб., 2003.