- •Лабораторная работа № 2 Логическая структура и физическая реализация баз данных
- •Основы программирования на Transact – sql
- •1. Стандартными идентификаторами: Table X; Key Col;
- •Лабораторная работа № 4 Создание, отладка и оптимизация sql – модулей
- •1. Нельзя в одном пакете изменять таблицу и ссылаться на ее новую колонку.
- •View не могут комбинироваться с другими командами в том же пакете.
- •Создание и обслуживание баз данных сервера
- •Лабораторная работа №6 Проектирование логической структуры базы данных
- •Создание, модификация и удаление таблиц
- •2. Выберите элемент Table в указанной базе данных.
- •Добавление, извлечение, модификация и удаление данных в таблицах
- •Раздел into позволяет создать новую таблицу для хранения результатов запроса, структура которой будет определяться списком выбора, т.Е. Динамически при выполнении запроса.
- •I)Использование команды select...Into:
- •V)Объединение таблиц с помощью раздела union:
- •X)Использование раздела compute:
- •Создание и управление представлениями
- •Создание, изменение, применение и удаление функций и хранимых процедур
- •Создание, программирование и управление триггерами
- •2. Тестирование триггера:
- •Лабораторная работа №15 Создание, применение и управление курсорами
- •3. Выборка данных:
- •Реализация клиентских приложений баз данных
- •Компонент ado-Запрос (tadoQuery) Назначение
- •Использование
- •Компонент ado-набор данных (tadoDataSet) Назначение
- •Система безопасности sql Server 2000
- •Лабораторная работа № 18 Регистрация серверов sql
- •Лабораторная работа № 19 Запуск, остановка и приостановка служб сервера
- •12. Если выбрали вариант sql Server, то необходимо установить параметры:
- •Лабораторная работа № 21. Публикация данных с помощью html-страниц в системе sql Server 2000
Создание, программирование и управление триггерами
Цель работы – изучение назначения и типов триггеров, условий их активации, синтаксиса и семантики команд языка Transact – SQL для их создания, модификации, переименования, программирования и удаления, а также приобретение навыков их проектирования, кодирования и отладки с применением хранимых процедур для получения информации о триггерах базы данных.
Триггер SQL Server 2000 – это специальный тип хранимых процеду, которые запускаются сервером автоматически при выполнении тех или иных действий с данными таблицы. Триггеры рвзличаются по типу команд, на которые они реагируют:
INSERT TRIGGER – запускаются при попытке вставить данные с помощью команды
INSERT;
UPDATE TRIGGER – запускаются при попытке изменения данных с помощью команды
UPDATE;
authsmall TRIGGER – запускаются при попытке удаления данных с помощью команды
DELETE.
Парамнтры FOR, AFTER и INSTEAD OF, указываемые при создании триггера,
определяют его поведение следующим образом:
FOR – запуск триггера при выполнении заданной в этом списке команды; AFTER – запуск триггера после успешного выполнеиния команд списка; INSTEAD OF – триггеры вызывается вместо выполнения команд списка.
Можно определить несколько AFTER – триггеров для каждой операции INSERT, UPDATE и DELETE. По умолчаню все триггеры являются AFTER – триггерами. Триггеры нельзясоздавать для временных или системных таблиц. Команда создания триггера должна быть первой в пакете и применяться только к одной таблице. Ее формат следующий:
CREATE TRIGGER Имя триггера
ON {Имя таблицы\Имя представления}
[WITH ENCRYPTION] -- шифрование кода триггера;
{ {{FOR\AFTER\INSTEAD OF}
{[DELETE] [,] [INSERT] [,] [UPDATE]}
[WITE APPEND] -- только для версий 6.5 и ниже; [NOT FOR REPLICATION] -- не для репликации; AS sql_statement […n] -- тело триггера;
}
|
{{FOR\AFTER\INSTEAD OF}
{[INSERT] [,] [UPDATE]}
[WITE APPEND] -- только для версий 6.5 и ниже; [NOT FOR REPLICATION] -- не длярепликации;
AS {IF UPDATE (column) -- при изменении столбца; [{AND\OR}UPDATE (column) […n]]}-- тоже;
|
IF (COLUMNS_UPDATED() {bitwise_operator} Update_bitmask)
{comparison_operator}column_bitmask […n]
}
sql_statement […n] -- тело триггера.
}
}
Вторая альтернатива команды {IF UPDATE…} используется для детального анализа изменений содержимого колонок с помощью специальных функций, битовых масок, операторов побитовой обработки, оператор сравнения и логических операторов.
Команда ALTER TRIGGER позволяет изменить параметры и тело триггера. С помощью команды DROP TRIGGER можно удалть любой триггер базы данных. Переименовать триггер можно системной хранимой процедурой sp_rename, а получить информацию о триггере можно при помощи системных хранимых процедур sp_helptext и sp_helptrigger.
Внутри триггера допускается использование любых команд языка Transact – SQL с некоторыми ограничениями. Также допускается и вызов хранимых процедур, включая системные.
Задание 1. Создать таблицу authsmall из таблицы authors базы данных Pubs и для новой таблицы запрограммировать триггер auth_del, который будет выводить информацию о попытках удаления и количестве удаляемых строк, выполнив действия:
1. Создание таблицы authsmall c колонками au_id, au_fname, au_lname, phone и копирование в нее данных из таблицы authors:
SELECT au_id, au_fname, au_lname, phone
INTO authsmoll
FROM authors
PRINT ‘Содержимое таблицы authsmoll:’ SELECT * FROM authsmall
2. Создание и программирование триггера: CREATE TRIGGER auth_del
ON authsmall FOR DELETE AS
PRINT ‘Попытка удаления’ + STR (@@ POWCOUNT)+
‘строк в таблице authsmall’
PRINT ‘Пользователь’ + CURRENT_USER IF CURRENT_USER <> ‘dbo’
BEGIN
PRINT ‘Удаление запрещено’ ROLLBACK TRANSACTION END
ELSE
PRINT ‘Удаление разрешено’
3. Тестирование триггера :
DELETE FROM authsmall WHERE au_fname = ‘Johnson’ DELETE FROM authsmall WHERE 2*2=5
Задание 2. Создать триггер auth_upd для таблицы authsmall, построенный в первом задании, который будет разрешать изменение столбца au_id этой таблицы всем, кроме владельца dbo, выполнив следующие действия:
1. Создание и программирование триггера: CREATE TRIGGER auth_upd
ON authsmall
FOR UPDATE
AS
SET NOCOUNT ON -- не сообщать о завершении команд; PRINT ‘Попытка изменения данных в таблице authsmall’ IF (COLUMNS_UPDATE () &1)! = 0 -- 1-й столбец;
PRINT ‘Изменение столбца au_id’
IF (COLUMNS_UPDATE () &2)! = 0 -- 2-й столбец; PRINT ‘Изменение столбца au_fname’
IF (COLUMNS_UPDATE () &4)! = 0 -- 3-й столбец; PRINT ‘Изменение столбца au_lname’
IF UPDATE (Phone)
PRINT ‘Изменение столбца phone’ IF ((CURRENT_USER = ‘dbo’) AND
(COLUMNS_UPDATED()&1)! = 0 -- 1-ый стлбец; BEGIN
PRINT ‘Пользователь dbo не может изменять’ + ‘идентификационный номер автора’
ROLLBACK TRANSACTION END
2. Тестирование триггера:
UPDATED authsmall SET phone =‘415 986 - 7020’, au_fname = ‘John’ WHERE au_lname = ‘Green’
UPDATED authsmall SET phone =‘913 843 - 7302’, au_id = ‘748-126859’ WHERE au_lname = ‘Smith’
Задание 3. Создать триггер для команд INSERT и UPDATE, запрещающий производить изменения для автора Billy Geitsi, выполнив действия:
1. Создание и программирование триггера: CREATE TRIGGER auth_ ins_upd ON authsmall
FOR INSERT, UPDATE
AS
IF EXISTS (SELECT * FROM authsmall -- inserted; WHERE au_lname = ‘Geitsi’ -- фамилия;
au_fname = ‘Billy’) -- имя;
BEGIN
PRINT ‘Недопустимо написание кнги’+
‘автором Billy Geitsi’ ROLLBACK TRANSACTION
END