Практикалық жұмыс №11. ТРИГГЕРЛЕРДІ ҚҰРУ, БАҒДАРЛАМАЛАУ ЖӘНЕ БАСҚАРУ Мақсаты: Transact-SQL тілінің командаларының синтаксисі және
семантикасы оларды құру, өзгерту, атын өзгерту, бағдарламалау және жою
үшін, сондай-ақ оларды жобалау, кодтау және өңдеу кезінде дағдыларды игеру,
триггерлер туралы ақпарат алу үшін сақталатын рәсімдерді пайдалану арқылы
үйрету.
Жұмысты орындау барысы
Тапсырма 1. Қандай да бір кестеге балама көшірме кестені құрастыру және
жаңа кестеге триггерді бағдарламалау, ол өшіру әрекеттерін және өшірілген
жол саны туралы ақпаратты шығарады, келесі әрекеттерді орындау арқылы:
Сәйкес 2-3 бағандары бар балама кестені құру және ол кесте жазбаларын
бастапқы кестеден алу.
Мысалы: authors кестесіне балама кесте authsmall құру.auth_del триггер
құрылған. Authsmall кестесіндегі құрылған au_id, au_fname, au_lname, phone
бағандары.
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)+
178
‘строк в таблице 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
111
Тапсырма 2. Балама кесте үшін тағы бір триггер құрастыру. Ол тек dbo
иесінен басқа, барлық пайдаланушыларға au_id бағанына өзгеріс енгізуге
рұқсат етеді.
Триггерді құру және бағдарламалау
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
179
FOR INSERT, UPDATE
AS
IF EXISTS (SELECT * FROM authsmall -- inserted;
WHERE au_lname = ‘Geitsi’ -- фамилия;
au_fname = ‘Billy’) -- имя;
BEGIN
PRINT ‘Недопустимо написание кнги’+
112
‘автором Billy Geitsi’
ROLLBACK TRANSACTION
END
2. Триггерді тестілеу:
UPDATE authsmall SET au_lname = ‘Geitsi’,
au_fname = ‘Billy’ WHERE au_lname = ‘Smith’.