Часть 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, в представления не включаются (попытки их использования приводят к диагностике об ошибке).