русс | укр

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

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

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

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


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

Триггеры INSERT


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


Триггеры INSERT можно использовать для изменения или даже удаления вставлен­ной записи. Хорошим примером использования этого триггера является предотвращение добавления определенных типов записей, таких как данные клиентов с лимитом кредитования больше 10000 долларов. К качестве еще одного примера можно привести добавление или изменение запрещенных данных во вставляемой записи (к примеру, изменение даты создания записи или имени пользователя, вставляюще­го эту запись.

Триггеры INSERT запускаются (и выполняются) при каждой попытке создать новую запись в таблице с помощью команды INSERT. При попытке пользователя вста­вить новую запись в таблицу, SQL Server копирует эту запись в таблицу триггеров базы данных и в специальную таблицу, которая хранится в памяти и имеет имя inserted. Это означает, что ваша новая запись существует в двух таблицах — таблице триггеров и таблице inserted. Запись в таблице inserted должна полностью соответствовать записи в таблице триггеров.

Таблицу inserted удобно использовать, когда требуется выполнить каскадные из­менения в других таблицах базы данных. Предположим, что существует база данных, содержащая информацию о клиентах, заказах и товарах. Каждый раз при выполне­нии заказа клиента вам нужно вычитать эти товары в учете складских запасов (т.е. в таблице товаров), чтобы поддерживать правильный баланс. Существует два способа решения этой задачи. Первый заключается в хранении данных о проданных клиенту товарах во временной переменной (или переменной в памяти) и обновлении таблицы товаров с помощью второй инструкции UPDATE. Однако такой метод требует написа­ния дополнительного кода, который может замедлить работу системы, и это нельзя считать идеальным решением. Второй способ состоит в использовании логической таблицы inserted. Требуемое значение хранится в двух местах— таблицах тригге­ров и inserted, так что вы можете извлечь значение из таблицы inserted и ис­пользовать его. Это означает, что вы можете вписать в триггер на вставку код авто­матического вычитания данных из таблицы товаров на основе значения в таблице inserted. Он может выглядеть примерно так.



UPDATE p

SET p.instock = {p.instock - i.qty)

FROM Products p JOIN inserted i ON p.prodid = i.prodid

Чтобы создать такой триггер и посмотреть, как он работает, вы должны выпол­нить несколько предварительных условий. Во-первых, вам нужна база данных Sales, созданная в работе 5. Во-вторых, вам нужно заполнить таблицу некоторыми значениями.

1. Откройте SQL Server Management Studio и выполните регистрацию с использованием аутентификации Windows или SQL Server.

2. Вставим в таблицу несколько записей о клиентах для продажи им товаров. Откройте новое окно запросов SQL Server и выполните следующий код заполнения таблицы клиентов информацией. (Для проверки значений за­пустите запрос SELECT * FROM customers).

USE Sales

INSERT customers

VALUES ('Gary','McKee', '111 Main', 'Palm Springs','CA','94312', ' 7605551212')

INSERT customers

VALUES ('Tom', 'Smith', '609 Georgia', 'Fresno', 'CA', '33045', '5105551212') INSERT customers

VALUES ('Shane', 'Travis', '806 Star', "Phoenix", 'AZ1, '85202', '6021112222')

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

INSERT Products

VALUES ('Giant Wheel of Brie', 200)

INSERT Products

VALUES ('Wool Blankers', 545)

INSERT Products

VALUES ('Espresso Beans', 1527)

INSERT Products

VALUES ('Notepads', 2098)

4. Закройте окно запросов.

Итак, мы заполнили данными таблицы в базе данных Sales и готовы создать триг­гер, который будет автоматически обновлять столбец instock таблицы Products (товары на складе) на основе данных о товаре, проданном клиенту. Мы создадим триггер INSERT в таблице Orders (заказы на продажу), поскольку при продаже това­ра клиенту вы вставляете новую запись в таблицу Orders.

1. Откройте SQL Server Management Studio и раскройте папки сервера Databases=> Sales=>Tables=> dbo.Orders.

2. Щелкните правой кнопкой мыши на папке Triggers и выберите команду New Trigger.

3. В строке CREATE TRIGGER введите имя триггера (InvUpdate), в строке ON введите имя таблицы (dbo.Orders).

4. В строке AFTER оставьте INSERT (удалите Update и Delete).

5. В поле (--Insert statements for trigger here) введите следующий код триггера (рис. 1).

UPDATE p

SET p.instock = (p.instock - i.qty) FROM Products p JOIN inserted i ON p.prodid = i.prodid

6. Для создания триггера щелкните на кнопке Execute.

Теперь вы можете протестировать триггер INSERT. В следующей последовательно­сти операций мы создадим в таблице Orders новую запись (имитируя таким образом заказ от клиента) для запуска триггера. Он должен уменьшить значение в столбце instock (остатки на складе) таблицы Products.

1. Откройте новый запрос SQL Server и выполните следующий код проверки значения instock для элемента 7 (оно должно быть равно 200) (рис. 2):

USE Sales



<== предыдущая лекция | следующая лекция ==>
Что такое триггеры | SELECT prodid, instock


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


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

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

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


 


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

 
 

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

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