
350
Часть III. Сервер баз данных Microsoft SQL Server 7.0
системного сообщения об ошибке, с текстом, указанным внутри
данного оператора. Значения 16 и 10 данной команды определяют
уровень критичности ошибки.
Проверьте работоспособность данного триггера, предвари-
тельно добавив значения в основную определяющую таблицу
TABLE 1. При этом удобно проверить функционирование данного
триггера, производя удаление с помощью утилиты SQL Server
Query Analyzer, что позволит увидеть системные сообщения об
ошибке, возникающие при его работе.
Следующим разрабатываемым в данном примере будет триг-
гер таблицы TABLE 1, позволяющий удалять все зависимые запи-
си из таблицы TABLE2 при удалении записи из таблицы
TABLE1. Другими словами, если в таблице TABLE1 производит-
ся удаление поля, то при этом должны удаляться все поля из таб-
лицы TABLE2, у которых значение поля MYID соответствует
значению поля MYID удаляемой из таблицы TABLE 1 записи.
Для этого создайте в таблице TABLE 1 новый триггер
DELCHECK, выполняющий следующий код:
CREATE TRIGGER DELCHECK ON TABLE1
FOR DELETE
AS
DECLARE @X INT
SELECT @X=D.MYID FROM TABLE1 A,
DELETED D WHERE A.MYID=D.M¥ID
IF EXISTS(SELECT * FROM
TABLE2 WHERE M*ID=@X)
DELETE FROM TABLE2 WHERE MYID=@X
Рассмотрим подробней данные SQL-команды. В первых стро-
ках этого кода создается новый триггер с именем DELCHECK для
таблицы TABLE 1, активизирующийся при удалении (ключевое
слово DELETE) записи. Следующим шагом является определение
переменной @Х, которая будет содержать значение поля MYID
удаляемой записи. Затем с помощью оператора SELECT данной
переменной присваивается значение поля MYID таблицы
DELETED, в которой и буферизуется удаляемая запись. С помо-
щью оператора EXISTS определяется наличие данных в таблице
TABLE2, для которых в поле MYID находится значение @Х.
Если таковые записи найдены, то система выполняет операцию
удаления таких записей.
Глава 3.2. Использование SQL - сервера
• 351
Приведенные примеры можно также применил» для исполь-
зуемой в этой книге учебной базы данных EDUCATION. Здесь
можно провести аналогию между таблицами студентов
STUDENTS и TABLE 1, а также таблицами успеваемости USP и
TABLE2. При добавлении новой оценки студенту в таблицу USP
может использоваться созданный триггер INSCHECK, который
позволит определить существование этого студента в таблице
STUDENTS. Данное действие определяется связью между табли-
цами по полю SNUM. С другой стороны, использование триггера
DELCHECK в таблице STUDENTS позволит при удалении имени
студента из данной таблицы также произвести уд&тение всех его
оценок в таблице USP.
Правила и стандартные значения
В системе SQL-сервер имеется три стандартных инструмента,
с помощью которых осуществляется контроль целостности вво-
димых данных: правила, ограничения и стандартные значения. С
учетом правил и ограничений создается перечень значений, кото-
рые могут вводиться в требуемое поле. При этом отличие между
ними заключается в том, что ограничения могут определяться в
процессе создания таблицы, а правило является отдельным объ-
ектом, который может определяться после завершения процесса
создания. При этом для требуемого поля может быть определено
только одно правило, тогда как ограничений может быть несколь-
ко. Стандартные значения используются для автоматической
подстановки в поле при отсутствии там какого-либо другого зна-
чения. Другими словами, данное значение используется по умол-
чанию для требуемого поля. Использование ограничений было
рассмотрено выше, поэтому перейдем к описанию возможностей
правил и стандартных значений.
Правило представляет собой набор инструкций сервера, предна-
значенный для контроля вводимых в поля таблицы значений. Для
создания правила следует выбрать соответствующую группу Rules в
списке объектов базы данных (см. рис. 3.6), после чего выполнить
команду New Rule меню Action. Для примера создадим правило
MARK VALUES, которое будет определять вводимые оценки по
предметам базы данных EDUCATION в диапазоне от 1 до 5. Выпол-
нение вышеописанных действий приведет к открытию диалогового
окна создания нового правила (см. рис. 3.44).