- •Н.И. Коваленко
- •Коваленко н.И., Банчук г.Г.
- •Коваленко Надежда Ивановна
- •Тема I. Общие сведения о ms sql Server 2000
- •1. Базы данных типа клиент/сервер
- •Система типа клиент/сервер
- •2. История sql Server
- •Основные количественные показатели системы sql – сервер
- •3. Обзор sql Server 2000
- •4. Стандартные объекты sqlServer
- •ТемаIi. Работа с ms sqlServer2000 и его компонентами
- •1. Запуск, приостановка и завершение работы sqlServer
- •2. SqlServerEnterpriseManager
- •3. Программа sqlServerQueryAnalyzer
- •Панель инструментов утилиты Query Analyzer
- •4. Обслуживание баз данных
- •Файлы операционной системы, используемые sql Server 2000:
- •Структура базы данных
- •5. УстановкаMicrosoftSqlServer2000
- •Ограничения инсталляции sql-сервера
- •ТемаIii. Работа с базой данных создание и использование индексов и ключей
- •1. Базы данных и их свойства
- •Описание ролей, используемых для доступа к базе данных и серверу баз данных
- •Дополнительные опции настройки базы данных
- •Настройка параметров доступа к базе данных
- •2. Таблицы базы данных.
- •3. Типы данных, используемые в sql-сервере
- •Текстовые типы данных
- •Типы данных даты и времени
- •Типы данных для хранения больших объемов информации
- •Типы данных специального назначения:
- •4. Основные операции с базами данных
- •5. Восстановление бд (администрированиеSqlServer2000)
- •6. Создание и использование индексов и ключей в системе sql Server.
- •7. Использование ограничений
- •8. Использование диаграмм для разработки структуры базы данных
- •9. Создание представлений (видов)
- •ТемаIv. Правила и создание значения
- •1. Инструменты контроля целостности данных
- •2. Создание правил и стандартных значений
- •ТемаV. Триггеры в системеSql–сервер
- •1. Понятие триггера. Типы триггеров
- •2. Создание триггеров
- •3. Использование триггеров. Виды триггеров
- •ТемаVi. Оптимизация запросов и основы sql
- •1. Оптимизация запросов
- •2. Основные операторы sql в sql Server 2000
- •3. Объединение таблиц в операторе select
- •From titles
- •4. Использование директив group by иHaving
- •5. Оператор insert
- •6. ОператорUpdate
- •7. ОператорDelete
- •8. ОператорCreatetable
- •ТемаVii. Создание и работа с представлениями
- •1. Основные сведения о представлениях
- •2. Создание представлений. Отображение представлений
- •3. Редактирование представлений. Отображение зависимостей представлений. Создание представлений и представлений
- •4. Переименование столбцов представлений. Переименование представлений. Удаление представлений
- •5. Изменение данных посредством представлений. Обновление данных с помощьюSqlServerEnterpriseManager
- •ТемаViii. Создание и использование курсоров
- •1. Понятие курсора
- •2. Выборка данных из курсора
- •3. Операторы и глобальные переменные для работы с курсорами
- •4. Примеры использования курсоров
- •ТемаIx. Использование хранимых процедур
- •1. Достоинства и недостатки хранимых процедур
- •2.Создание хранимой процедуры
- •3. Операторы языка управления программой. Оператор declare
- •4. Операторы goto, begin…end и if…else
- •5. Операторы waitfor, return, while, break и continue
- •6. Операторы print и raiserror
- •7. Использование параметров в хранимых процедурах
- •8. Глобальные переменные. Отладка хранимых процедур
- •Тема X. Транзакции и блокировки
- •1. Определение транзакции. Ограничения для транзакций. Уровни изоляции транзакций
- •2. Базовая информация о блокировках. Типы блокировок
- •3. Создание транзакций и работа с ними. Точки сохранения
- •4.Отображение информации о блокировках. Явное задание блокировки
- •Описание параметров для явного задания блокировок
- •ТемаXi. Система безопасностиSqlServer2000
- •1. Типы безопасности. Создание и управление бюджетами пользователей
- •Стандартные роли сервера
- •Стандартные роли базы данных
- •2. Добавление новых пользователей. Удаление идентификаторов и пользователей
- •3. Создание ролей. Удаление ролей
- •4. Права доступа. Управление правами доступа
- •ТемаXii. Использование распределенных объектов управления.
- •1.Sql-dmo. Назначение, возможности
- •2. Экспорт данных с помощью команды вср
- •3. Использование объектовSql-dmOв хранимых процедурах
- •ТемаXiii. Основные сведения о хранилищах данных
- •1. Хранилища данных. Системы поддержки принятия решений (dss). Интерактивная аналитическая обработка (olap)
- •Сравнение субд и хранилища данных
- •2. Компоненты хранилища данных. Хранилища данных и магазины данных
- •3. Преобразование данных. Метаданные
- •4. Разработка плана хранилища данных
- •Microsoft Repository
- •С помощью мастера dts можно выполнять также простые преобразования данных, сложные преобразования выполняются с помощью dts Designer.
- •ТемаXiv. Использование служб преобразования данных
- •1. Службы преобразования данных (dts).DtSи хранилища данных
- •2. СредствоDtsDataPump
- •3. МастераDts
- •4. ИспользованиеDtsDesigner
- •Тема XV. Службы olap Microsoft sql Server
- •1.OlaPи многомерные данные
- •2. Хранение данных в бдolap
- •3. Оптимизация базы данныхOlap
- •4. Доступ к многомерным данным
3. Использование триггеров. Виды триггеров
Различают триггеры вставки, обновления и удаления.
Триггеры вставки (INSERT) и обновления (UPDATE) особенно удобны, так как могут поддерживать условия ссылочной целостности и обеспечения правильности данных перед их вводом в таблицу. Обычно триггеры применяют для обновления столбцов отсчета времени или для проверки данных в определенных столбцах на соответствие требуемому критерию. Триггеры следует применять, когда критерий проверки более сложен, чем условие декларативной ссылочной целостности.
Триггеры удаленияобычно применяются в двух случаях:
предотвращение удаления строк, которое может вызвать проблемы с целостностью данных, например строки, используемой в качестве внешнего ключа к другим таблицам;
выполнение каскадных операций удаления дочерних строк главной строки.
Переменная @@ROWCOUNTпозволяет узнать, сколько строк составляет рабочий набор и регулировать количество удаляемых строк.
Оператор RASEERRORдает возможность указать текст сообщения, уровень опасности, состояние информации и скомбинировать все это для пользователя в описательное сообщение.
Триггеры откатаимеют специальную опцию:
ROLLBACK TRIGGER [WITH RAISERROR номер_ошиб-ки [сообщение]]
Эта инструкция прекращающает все операции. Работа триггера останавливается, отменяется модификация данных, которая вызвала выполнение триггера. При использовании инструкции триггера отката следует указать номер ошибки и сообщения.
Триггеры могут вызвать любую из расширенных процедур XP_*,доступных на сервере, и любую внешнюю процедуру, которая добавлена к серверу с помощью процедурыsp_addextendedproc. Например, триггер может послать сообщение по электронной почте, используя расширенную процедуруXP_sendmail.
Триггеры можно встраивать друг в друга, допускается 16 уровней вложенности. Триггеры становятся вложенными, если выполнение одного триггера модифицирует таблицу, что вызывает к работе другой триггер. Уровень вложенности триггера можно проверить с помощью значения переменной @@NESTLEVEL, оно должно быть от 0 до 16.
Триггеры и механизм декларативной ссылочной целостности обычно не могут работать вместе. Следует применять либо триггер, либо условие ссылочной целостности (через FOREIGNKEY). Для изменения триггера можно использоватьSQLServerEnterpriseManagerили командуALTER TRIGGER, которая имеет тот же синтаксис, что и команда создания триггера.
Системные процедуры sp_help,sp_dependsиsp_helptextпредоставляют следующую информацию о триггере: существует ли триггер, к каким структурам он обращается, что является его текстом и источником кода. Эти процедуры работают, если не применялась опцияENCRYPTION.
Системная процедура sp_help сообщает информацию о любом объекте базы данных. Если не указано имя объекта, тоSQLServerсообщает информацию обо всех пользовательских объектах, найденных в таблицеSysobjects. Эта системная процедура сообщает имя создателя триггера и время его создания.
Процедура sp_helptext представляет текст триггера, хранящийся в таблицеSyscomments.
Для удаления триггера используют команду
DROP TRIGGER[владелец.] имя_триггера[,…n]
При удалении таблицы удаляются и связанные с нею триггеры.
Поддержка в системе SQLServerцелостности ссылок, выполняемой в СУБДAccessавтоматически, без триггеров невозможна.
Для примера рассмотрим использование триггера для поддержания целостности данных в небольшой БД.
Для этого создадим следующие две таблицы:
Имя таблицы: TABLE1,
используемые поля:
MYIDINT,MYNAMECHAR(15);
Имя таблицы: TABLE2,
используемые поля:
MYIDINT,MYVALUE SMALLMONEY.
Следующим этапом разработки структуры будет определение триггера INCHECKдля таблицыTABLE2, который будет проверять наличие вводимого значенияMYIDв полеMYIDтаблицыTABLE1. Другими словами, создаваемый триггер не позволит добавить новую запись в таблицуTABLE2, если значение в полеMYIDне совпадает со значением в полеMYIDтаблицыTABLE1.
Для создания триггера INSCHECKс помощью утилитыSQLServerEnterpriseManagerнеобходимо выбрать таблицуTABLE2в списке объектов базы данных, после чего выполнить командуВсе задачи /Manager TriggersменюДействие. Это приведет к открытию диалогового окна свойств триггера. В данное диалоговое окно введите следующий текст:
CREATE TRIGGER INCНECK ON TABLE2
FOR INSERT
AS
DECLARE @X INT
SELECT @X=I.MYID FROM TABLE2 A,
INSERTED I WHERE A.MYID=I.MYID
IF NOT (EXISTS (SELECT * FROM
TABLE1 WHERE MYID=@X))
BEGIN
ROLLBACK TRAN
RAISERROR (‘Ошибка целостности!!!’,16,10)
END
Рассмотрим подробнее команды данного листинга. Здесь с помощью первых строк определяется создание нового триггера с именем INCНECKдля таблицыTABLE2, причем создание триггера определяется для процесса добавления новых записей (ключевое словоINSERT). Далее определяется переменная@X, которой будет присваиваться значениеMYIDдобавляемой записи.
В процессе использования триггера создается временная таблица INSERTED, хранящая в себе добавляемые значения начальной таблицыTABLE2. С помощью оператораSELECTпеременной@Xприсваивается значение поляMYIDиз таблицыTABLE2, т.е. значение поляMYIDвновь добавляемой записи.
Следующим шагом работы триггера будет определение наличия в поле MYIDтаблицыTABLE1значения переменной@X, т.е. осуществляется проверка допустимости вводимого значения. Если данное значение не найдено, то выполняется блок операторов, заключенных в областиBEGIN…END. Здесь с помощью командыROLLBACK TRAN осуществляется отмена последней операции добавления данных. При этом с помощью оператораRAISERRORосуществляется выдача системного сообщения об ошибке, с текстом, указанным внутри данного оператора.Значения 16 и 10 данной команды определяют уровень критичности ошибки.
Проверьте работоспособность данного триггера, предварительно добавив значения в основную определяющую таблицу TABLE1. При этом удобно проверить функционирование данного триггера, производя удаление с помощью утилиты SQL Server Query Analyzer, что позволит увидеть системные сообщения об ошибке, возникающие при его работе.
Следующим, разрабатываемым в данном примере, будет триггер таблицы TABLE1, позволяющий удалять все зависимые записи из таблицы TABLE2 при удалении загаси из таблицы TABLE1. Другими словами, если в таблице TABLE1 производится удаление записи, то при этом должны удаляться все записи из таблицы TABLE2, у которых значение поля MYID соответствует значению поля MYID удаляемой из таблицы TABLE1 записи.
Для этого создайте в таблице TABLE1 новый триггер 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.MYID
IF EXISTS (SELECT * FROM
TABLE2 WHERE MYID=@X)
DELETE FROM TABLE2 WHERE MYID=@X
Рассмотрим подробней данные SQL-команды. В первых строках этого кода создается новый триггер с именем DELCHECK для таблицы TABLE1, активизирующийся при удалении (ключевое слово DELETE) записи. Следующим шагом является определение переменной @X, которая будет содержать значение поля MY1D удаляемой записи. Затем с помощью оператора SELECT данной переменной присваивается значение поля MYID таблицы DELETED, в которой и буферизуется удаляемая запись. С помощью оператора EXISTS определяется наличие данных в таблице TABLE2, для которых в поле MY1D находится значение @Х. Если таковые записи найдены, то система выполняет операцию удаления таких записей.