Представления можно применять для отображения нескольких столбцов таблицы, поднабора строк таблицы или данных из нескольких таблиц. Они удобны для просмотра данных, однако при модификации данных через представление могут возникнуть проблемы.
Поскольку представления могут не отображать все столбцы таблицы, инструкции модификации данных могут не выполняться. Предположим, что у нас имеется таблица клиентов с такой информацией, как фамилия, адрес, город, штат, почтовый индекс и т.д. Затем представим, что мы создали представление, отображающее все столбцы, за исключением поля city. Если вы попытаетесь обновить таблицу клиентов через это новое представление, то обновление не будет выполнено, поскольку поле city (а оно обязательно) недоступно через представление. Использование триггера INSTEAD OF может сделать такой тип обновлений успешным.
В следующей последовательности действий мы создадим триггер INSTEAD OF, который будет вставлять в таблицу значение, недоступное в представлении. Для этого мы вначале создадим представление, не отображающее столбец city (обязательный для обновления), а затем попытаемся выполнить обновление этого столбца. Далее мы создадим триггер INSTEAD OF, который может вставлять отсутствующее значение, и вновь попытаемся выполнить обновление.
1. Создадим представление, не отображающее столбец city. Чтобы создать представление, которое отображает данные только клиентов из города Феникс, в SQL Server Management Studio откройте новый запрос SQL Server и выполните следующий код.
USE Sales
GO
CREATE VIEW PHX_Customers AS
SELECT fname, lname, address, state, zip, phone
FROM Customers
WHERE City = 'Phoenix'
2. Дабы убедиться, что это представление отображает только те столбцы, которые вы задали, щелкните на кнопке New Query и выполните следующий код
(рис. 10).
USE Sales
SELECT * FROM PHX_Customers
Рис. 10. Список клиентов из Феникса
3. Попытайтесь вставить через представление данные нового клиента. Для этого используйте команду Query=> New Query и выполните следующий код (рис. 11).