- •Лабораторная работа № 3 Использование диаграмм для графического представления структуры базы данных
- •Теоретическое обоснование
- •Методика и порядок выполнения работы Методика и порядок выполнения задания 1
- •Методика и порядок выполнения задания 2
- •Содержание отчета и его форма
- •Методика и порядок выполнения работы
- •Select ...
- •Методика и порядок выполнения работы
- •Контрольные вопросы
- •Лабораторная работа № 7 Использование ограничений в sql – совместимых базах данных
- •Теоретическое обоснование
- •Контрольные вопросы
- •Лабораторная работа № 8 Хранимые процедуры в sql Server
- •Теоретическое обоснование
- •Задания к лабораторной работе № 7
- •Контрольные вопросы
- •Лабораторная работа № 9 Триггеры в sql Server
- •Использование триггеров
- •Срабатывание триггеров
- •Создание триггеров
- •Удаление триггеров
- •Таблицы deleted и inserted
- •Просмотр таблиц deleted и inserted
- •Вставка и удаление нескольких записей
- •Триггер вставки
- •Условный триггер вставки
- •Триггер обновления
- •Задание к лабораторной работе № 9
- •Методика и порядок выполнения работы Методика и порядок выполнения задания 1
- •Методика и порядок выполнения задания 2
- •Содержание отчета и его форма
- •Контрольные вопросы и защита работы
- •Лабораторная работа № 11
- •Обеспечение безопасности пользователей в sql Server
- •Цель и содержание:изучить основные приемы администрирования баз данных вSqlServer, рассмотреть возможность добавления новых пользователей в систему и разграничения их полномочий.
- •Теоретическое обоснование
- •Методика и порядок выполнения работы Методика и порядок выполнения задания 1
- •Методика и порядок выполнения задания 2
- •Методика и порядок выполнения задания 3
- •Содержание отчета и его форма
- •Методика и порядок выполнения работы Методика и порядок выполнения задания 1
- •Методика и порядок выполнения задания 2
- •Методика и порядок выполнения задания 3
- •Содержание отчета и его форма
- •Контрольные вопросы
- •Лабораторная работа № 14 Организация обмена данными. Взаимодействие sql-сервера с Word и Excel
- •Контрольные вопросы
- •Лабораторная работа № 15 Организация обмена данными. Взаимодействие sql-сервера и локальных баз данных Access и FoxPro
- •Взаимодействие sql-сервера и Visual FoxPro
- •Контрольные вопросы
Триггер вставки
В листинге 2 записи, вставляемые в таблицу titles, проверяются на ссылочную целостность по отношению к таблице publishers. Если какая-либо запись нарушает правила ссылочной целостности, транзакция вставки откатывается.
Листинг 2. Триггер вставки с проверкой ссылочной целостности
CREATE TRIGGER tr_titles_i
ON titles
FOR INSERT
AS
DECLARE @rows INT -- Переменная для хранения @@ROWCOUNT
SELECT @rows = @@ROWCOUNT
IF @rows = 0 -- Вставленных записей нет, выйти из триггера
RETURN
/* Проверить вставку в столбец pub_id, а также наличие
** pub_id в таблице publishers для всех вставленных pub_id */
IF UPDATE(pub_id) -- Было ли вставлено новое значение pub_id?
AND SELECT COUNT(*)
FROM inserted i, publishers p
WHERE p.pub_id = i.pub_id ) != @rows
BEGIN
RAISERROR ('Invalid pub_id inserted', 16, 1)
ROLLBACK TRANSACTION
END
RETURN
Следующий раздел расширяет приведенный пример и показывает, как проверить ссылочную целостность записей, вставленных в таблицу titles, посредством сравнения внешних ключей с первичными ключами таблицы publishers.
Условный триггер вставки
Записи, нарушающие ссылочную целостность, удаляются из titles, а остальные записи остаются в таблице. В листинге 3 приведена реализация условного триггера вставки, решающего эту задачу.
Листинг 3. Условный триггер вставки
CREATE TRIGGER tr_titles_i
ON titles
FOR INSERT
AS
DECLARE @rows INT -- Переменная для хранения @@ROWCOUNT
SELECT @rows = @@ROWCOUNT
IF @rows = 0 -- Вставленных записей нет, выйти из триггера RETURN
/* Проверить вставку в столбец pub_id, а также наличие
** pub_id в таблице publishers для всех вставленных pub_id
** Все нарушающие записи удаляются из titles */
IF UPDATE(pub_id) -- Было ли вставлено новое значение pub_id?
AND SELECT COUNT(*)
FROM inserted i, publishers p
WHERE p.pub_id = i.pub_id ) != @rows
BEGIN
DELETE titles
FROM titles t, inserted i
WHERE t.pub_id NOT IN
(SELECT pub_id FROM publishers)
RAISERROR ('Some invalid pub_id not inserted', 16, 1)
END
RETURN
Триггер обновления
В этом примере при вставке или обновлении записи sales мы обновляем соответствующий итоговый столбец, ytd_sales, в таблице titles. Листинг 4 показывает, как обновление сводных данных реализуется с помощью триггеров.
Листинг 4. Обновление сводной величины
CREATE TRIGGER tr_total_sales
ON sales
FOR UPDATE, INSERT
AS
DECLARE @rows INT -- Переменная для хранения @@ROWCOUNT
SELECT @rows = @@ROWCOUNT
IF @rows = 0 -- Вставленных записей нет, выйти из триггера
RETURN
IF EXISTS (SELECT * FROM DELETED) AND @rows > 1
BEGIN
PRINT 'Multi-row updates to sales not allowed!'
ROLLBACK TRAN
RETURN
END
/* Обновить ytd_sales в таблице titles значением qty
** в модифицированных записях sales */
IF UPDATE(qty)
BEGIN
UPDATE titles SET ytd_sales = ISNULL(ytd_sales, 0)
/* Функция ISNULL используется на случай отсутствия значений */
/* Сумма по вставкам и удалениям вычисляется в подзапросе */
+ (SELECT ISNULL(SUM(i.qty), 0)
FROM inserted i
WHERE i.title_id = titles.title_id)
- (SELECT ISNULL(SUM(d.qty), 0)
FROM deleted d
WHERE d.title_id = titles.title_id)
END
RETURN
