Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекция - Представления.doc
Скачиваний:
0
Добавлен:
01.04.2025
Размер:
407.55 Кб
Скачать

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

Задания для самостоятельной работы

  1. В представлении покажите наиболее активных клиентов. Задайте имена выводимым столбцам.

  2. Создать представление, позволяющее получать сведения о продажах за прошлый год.

  3. Приведите пример, в котором используется соединение представления с другими таблицами базы данных

  4. Создайте представление с группировкой и агрегирующими функциями.

  5. Создайте представление с вычислениями.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]