русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

IF EXISTS


Дата добавления: 2015-07-09; просмотров: 671; Нарушение авторских прав


( SELECT 'TRUE'

FROM Progress

WHERE (DATEPART(mm,getDATE())<>'01' AND NTerm %2=1)

OR (DATEPART(mm,getDATE())<>'06' AND NTerm %2=0))

BEGIN

RAISERROR('Нельзя исправлять оценку!!!',20,1)

/*-- Откат транзакции в случае возникновения ошибки*/

ROLLBACK TRAN

END

Теперь любая попытка вставить или изменить данные в период отличный от оговоренного, например попытка 14 декабря выполнить действия

UPDATE Progress SET mark=2 WHERE NRecordBook='050001'

INSERT INTO progress VALUES ('050001',1,2,1,4,5)

вызовет сообщение:

Server: Msg 50000

Нельзя исправлять оценку!!!

Пример 93

Задача.

Создать триггер, запрещающий изменять записи для нечетного семестра всегда, кроме января, для четных семестров всегда кроме июня.

Решение.

CREATE TRIGGER ProgressTerm

ON PROGRESS

FOR INSERT, UPDATE, DELETE

AS

IF EXISTS

( SELECT 'TRUE'

FROM progress

WHERE (DATEPART(mm,getDATE())<>'01' AND NTerm %2=1)

OR (DATEPART(mm,getDATE())<>'06' AND NTerm %2=0))

BEGIN

RAISERROR('Сессия завершена! Правка запрещена !!!',16,1)

/*-- Откат транзакции в случае возникновения ошибки*/

ROLLBACK TRAN

END

Теперь попытка ввода или редактирования данных в период между сессиями:

update Progress SET mark=2 WHERE NRecordBook='050001'

INSERT INTO Progress

VALUES ('050001',1,2,1,4,5)

UPDATE Progress SET mark=2

WHERE NRecordBook='050001'

потерпит неудачу и будет выдано сообщение

Server: Msg 50000

Сессия завершена! Правка запрещена !!!

Пример 94

Задача.

Написать триггер, удаляющий строки в таблице Progress относящиеся к записям удаляемым из отношения Student.

Решение

CREATE TRIGGER StudentProgress

ON Student

FOR INSERT, UPDATE, DELETE

AS

DECLARE @COUNT int

SELECT @COUNT=COUNT(*) FROM DELETED



-- Проверяем удалялись ли из главной таблицы Student какие-либо записи.

-- Если да, то удаление необходимо выполнить и из зависимой таблицы

IF @COUNT>0

BEGIN

DELETE FROM PROGRESS

FROM DELETED D

JOIN PROGRESS P

ON D.NRecordBook=P.NRecordBook

END

Пример 95

Задача.

Создать триггер, запрещающий исправлять оценку в отношении Progress на более высокую.

Решение

CREATE TRIGGER Update1Progress

ON PROGRESS FOR UPDATE

AS

IF EXISTS

( SELECT 'TRUE'

FROM INSERTED I

LEFT JOIN DELETED D

ON D.NRecordBook=I.NRecordBook

WHERE I.mark>D.mark)

BEGIN

RAISERROR('Нельзя исправлять оценку!!!',16,1)

-- Откат транзакции в случае возникновения ошибки

ROLLBACK TRAN

END

Теперь выполнение команды, пытающейся заменить оценку 3 на оценку 4

UPDATE Progress

SET mark=4

WHERE NRecordBook='050001'

Завершится следующим сообщением

Server: Msg 50000

Нельзя исправлять оценку!!!

Триггеры можно включать и выключать с помощью команды ALTER.

Cинтаксис команды

ALTER TABLE <имя таблицы>

<ENABLE|DISABLE> TRIGGER <ALL|<имя триггера>>

Задание 31

Создать триггер, запрещающий добавление строк в таблицу PLAN.

Задание 32

Создать триггер, запрещающий обновление строк в таблице SUBJECT.

Задание 33

Создать триггер, запрещающий обновление строк в таблице WORK.

Задание 34

Создать хранимую процедуру, выполняющую вставку строк в таблицу Progress и триггер, который будет срабатывать на вставку строк и будет подсчитывать средний балл вводимого студента и выводить его фамилию и средний балл (по экзаменам).

Вопросы для самоконтроля к лабораторной работе № 8

1. С каким объектом базы данных связан триггер и как запускается триггер?

2. Какие существуют типы триггеров в SQL Server 2000 (по типу операции, по поведению)?

3. Сколько триггеров каждого типа можно создать для одной таблицы?

4. Какие операции не могут выполняться в триггере?

5. С помощью какой команды изменяются параметры триггера?

6. С помощью какой команды удаляется триггер, кто обладает правом удаления триггера?

7. Какие таблицы автоматически создаются при вызове триггера? От чего зависит содержимое этих таблиц?

8. В чём сходство и отличие триггера и хранимой процедуры?

9. В чём преимущества хранимых процедур? Для чего обычно используются хранимые процедуры?

10. Могут ли хранимые процедуры возвращать значения?




<== предыдущая лекция | следующая лекция ==>
Лабораторная работа №8 | Задания в тестовой форме


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 0.969 сек.