Часть 3. Модификация данных через представление
Задание 11.
Данные, предъявляемые пользователю через представление, могут изменяться с помощью команд модификации DML, но при этом фактическая модификация данных будет осуществляться не в виртуальной таблице-представлении, а в соответствующей базовой таблице.
Сначала выполните обычный запрос на обновление
USE Торговая_фирма
GO
UPDATE Продажи
SET Количество_ед_товара = 20
WHEREКоличество_ед_товара = 10
Затем внесите изменения в таблицу Продажис помощьюпредставления Товары_Количество_2
USEТорговая_фирма
GO
INSERT INTOТовары_Количество_2
VALUES ('Вишня', 90, 20.04.2010)
Попытка внести изменения будет неудачной, поскольку представление определено на нескольких таблицах.
Часть 4. Примеры проверки данных, вставляемых в таблицы с помощью представлений
(ключевое словоWITH CHECK OPTION)
Задание 12.
1. Создайте представление, отображающее поставщиков из заданных городов
USEТорговая_фирма
GO
CREATE VIEWПоставщики_V
AS
SELECT Название_фирмы
FROMПоставщики
WHERE Город LIKE 'Мос%'
OR Город LIKE 'Саратов%'
WITH CHECK OPTION
2. Выполните оператор SELECT * FROM Поставщики_V
Получите список поставщиков из Москвы и Саратова.
3. Теперь предпримем попытку обновить одну из строк с помощью этого представления – внести в таблицу поставщика из города с названием, отличным от допустимых значений, например, из Твери:
USEТорговая_фирма
GO
UPDATE Поставщики_V
SETГород = 'Астрахань'
WHEREID_Поставщика = 1
Посмотрите, к чему приводит попытка выполнить этот оператор.
Как просмотреть коды представления
Можно воспользоваться процедурой sp_helptext.
Пример 13.
Exec sp_helptext Поставщики_V
Удаление представлений
Для удаления представления используется стандартная конструкция
DROP VIEW <имя представления > [,<имя представления 2 >[,…n]]
Пример 14. Связывание представления c таблицей.
Create view А
as
select Название_Товара, Категория from Товары
‘---------------------------------------------------------------------------------------
Create view В
as
select Категория_товара, Название_товара
from А inner joinКатегории_товаров
on Категории_товаров.id_категории = А.Категория
-----------------------
select * from В
Замечание. При связке представления с таблицей в преставлении должно находиться поле с внешним ключом!
Замечание.Запросы, содержащие вычисление итоговых результатов со словом COMPUTE, в представления не включаются (попытки их использования приводят к диагностике об ошибке).