MS SQL-Server 2000. Сивохин А.В. - 55 стр.

UptoLike

Составители: 

{[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
                {[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