
Часть 3. Использование представлений
Пример 8. С помощью представления Товары_Количество_2 требуется выбрать товары, которые были проданы в период с 1.01.2008 по 1.06.2008.
Это опять можно сделать двумя способами:
Способ 1. С помощью Management studio. Для этого выделите представление Товары_Количество_2 и выберите команду Проект.
Далее в окне редактора запросов создайте запрос к представлению, ориентируясь на рисунок 2.
Рис. 2. Редактор запросов в Management studio
Способ 2. С помощью Редактора запросов. Введите коды, аналогичные тем, которые были сгенерированы в предыдущем способе:
SET QUOTED_IDENTIFIER ON - - Включен контроль приращения размеров файла данных
GO
SET ANSI_NULLS ON - - Включен контроль NULL-значений
GO
ALTER Товары_Количество_2
AS
SELECT dbo.Товары.Название_товара, dbo.Продажи.Количество_ед_товара, dbo.Продажи.Дата
FROM dbo.Товары INNER JOIN
dbo.Продажи ON dbo.Товары.ID_товара = dbo.Продажи.Товар
WHERE (CAST(Продажи.Дата AS DATE) BETWEEN '01.01.2010' AND '20.02.2010')
Пример 9. С помощью представления Товары_Количество_2 требуется получить данные о проданных товарах за вчерашний день.
Пояснение. Возможно, даты, которые хранятся в базе данных Торговая_фирма, относятся к давно прошедшему времени.
Перед выполнением задания пополните таблицу записями о продажах за вчерашний день.
Чтобы пополнить базу данных сведениями о вчерашних продажах, можно выполнить следующие коды:
USE Торговая_фирма
GO
INSERT INTO Продажи
(Дата,Товар, Клиент, Количество_ед_товара)
VALUES
((DATEADD(day, -1, GETDATE()), 2, 2, 10)
Функция DATEADD позволяет складывать и вычитать значения продолжительности любых промежутков времени (дни, недели и т. д.).
Часть 4. Модификация данных через представление
Пример 10.
Данные, предъявляемые пользователю через представление, могут изменяться с помощью команд модификации DML, но при этом фактическая модификация данных будет осуществляться не в виртуальной таблице-представлении, а в соответствующей базовой таблице.
Сначала выполните обычный запрос на обновление
USE Торговая_фирма
GO
UPDATE Продажи
SET Количество_ед_товара = 20
WHERE Количество_ед_товара = 10
Затем внесите изменения в таблицу Продажи с помощью представления Товары_Количество_2
USE Торговая_фирма
GO
INSERT INTO Товары_Количество_2
VALUES ('Вишня', 90, 20.04.2010)
Попытка внести изменения будет неудачной, поскольку представление определено на нескольких таблицах.
Часть 5. Примеры проверки данных, вставляемых в таблицы с помощью представлений
(ключевое слово WITH CHECK OPTION)
Задание 11.
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 Город = 'Астрахань'
WHERE ID_Поставщика = 1
Посмотрите, к чему приводит попытка выполнить этот оператор.
Как просмотреть коды представления
Можно воспользоваться процедурой sp_helptext.
Пример 12.
Exec sp_helptext Поставщики_V
Удаление представлений
Для удаления представления используется стандартная конструкция
DROP VIEW <имя представления > [,<имя представления 2 >[,…n]]
Пример 13. Связывание представления c таблицей.
//------------------пусть создано представление------------------------------------------
create view А
as
select Название_Товара, Категория from Товары
//------------------- устанавливаем связь представления с таблицей-----------------
create view В
as
select Категория_товара, Название_товара
from А inner join Категории_товаров
on Категории_товаров.id_категории = А.Категория
-----------------------
select * from В
Замечание. При связке представления с таблицей в преставлении должно находиться поле с внешним ключом!
Замечание. Запросы, содержащие вычисление итоговых результатов со словом COMPUTE, в представления не включаются (попытки их использования приводят к диагностике об ошибке).
Задания для самостоятельной работы
В представлении покажите наиболее активных клиентов. Задайте имена выводимым столбцам.
Создать представление, позволяющее получать сведения о продажах за прошлый год.
Приведите пример, в котором используется соединение представления с другими таблицами базы данных
Создайте представление с группировкой и агрегирующими функциями.
Создайте представление с вычислениями.