Представления можно использовать не только для извлечения, но и для и модификации — вставки, обновления и удаления записей. Если вы решили использовать представления для модификации данных, вам следует помнить следующее.
♦ Если вы применяете представление для модификации данных, то эта модификация может повлиять только на базовую таблицу. Это означает, что если представление отображает данные из двух таблиц, вы можете написать инструкцию, обновляющую только одну таблицу. Если же некоторая инструкция попытается обновить обе таблицы, вы получите сообщение об ошибке.
♦ Вы не можете модифицировать данные в представлении, использующем агрегатные функции. Агрегатной называется функция, возвращающая итоговое значение некоторого типа, например, SUM () или AVG (). Если вы попытаетесь модифицировать такое представление, то получите сообщение об ошибке.
♦ Вы уже знаете, что представления необязательно отображают все поля таблицы. Если вы попытаетесь вставить запись в представление, не отображающее все поля, то может возникнуть проблема. Некоторые из полей, не отображаемые в представлении, могут не принимать пустые значения, но вы не можете вставить данные в поля, отсутствующие в представлении. Однако вы все же можете использовать представление для операций вставки и удаления.
Рис. 6. Новое сводное представление
Чтобы модифицировать данные через представление, нужно создать такое представление. У нас его пока нет, поскольку в вашем текущем представлении нет достаточного количества столбцов из какой-либо таблицы для модификации. Поэтому мы создадим более простое представление для обновления таблицы .
1. Откройте SQL Server Management Studio и выполните подключение с использованием аутентификации Windows.
2. В окне Object Explorer раскройте папки сервера Databases=> Sales, щелкните правой кнопкой на папке Views и выберите команду New View Откроется окно со списком таблиц БД Sales.
3. Выберите таблицы, поля которых будут использоваться в запросе.
4. С помощью мыши перетащите используемые в запросе поля в столбец Column закладки View. Эти поля автоматически добавляются в шаблон запроса SELECT в нижней части окна.
5. Для сохранения запроса закройте закладку, нажав на [Х] в правом верхнем углу окна View , и в раскрывшемся окне введите имя представления Update_Products.
Теперь у вас есть представление (рис. 7), и вы можете протестировать его, чтобы убедиться в возможности обновления данных.
1. Щелкнув на кнопке New Query, откройте новый запрос SQL Server Query.
2. Введите и выполните следующий код тестирования представления
USE Sales
SELECT * from dbo.Update_Products
Рис. 7. Создаем представление с возможностью обновления данных
3. Теперь вы знаете, что представление работает так, как ожидалось. Создадим новую запись. Откройте новый запрос SQL Server и выполните следующий код.
USE Sales
INSERT dbo.Update_Products
VALUES ('tee',10)
4. Чтобы просмотреть данные, вставленные в базовую таблицу, выполните в окне запросов следующий код.
USE Sales
SELECT * FROM dbo.Products
WHERE Description = 'Tee'
В результирующем наборе данных из представления dbo.Update_Products вы должны увидеть только два заполненных столбца. Однако, взглянув на базовую таблицу, вы увидите три заполненных столбца. При модификации представления вы вставили значения только в два доступных столбца, а программа SQL Server заполнила остальные, поскольку в них применены ограничения на умолчания.