- •Часть 3
- •Часть 3-6. Обеспечение целостности данных Упражнение 1 – Создание новой таблицы и применение ограничений целостности
- •Упражнение 2 – отключение ограничений
- •Часть 3-7. Использование представлений Упражнение 1 – Создание представления
- •Упражнение 2 – создание индексированного представления
- •Упражнение 3 – просмотр системной информации о представлениях
- •Часть 3-8. Создание и использование хранимых процедур Упражнение 1 - Создание хранимой процедуры без параметров
- •Упражнение 2 – создание хранимой процедуры с параметром
- •Упражнение 3 – создание хранимой процедуры с параметрами и значениями по умолчанию
- •Часть 3-9. Создание udf
- •Упражнение 1 - Создание скалярной функции
- •Упражнение 2 - Создание функции, возвращающей табличное значение (I-l t-V udf)
- •Упражнение 3 - Контроль контекста выполнения
- •Часть 3-10. Управление транзакциями и блокировками
- •Упражнение 1 - Применение транзакций
- •Упражнение 2 - Выполнение отката транзакций
- •Упражнение 3 - Просмотр сведений о блокировках
- •Упражнение 4 - Настройка параметров блокировки
- •Часть 3-11. Создание триггеров
- •Упражнение 1 - Создание новой таблицы
- •Упражнение 2 - Создание триггера для таблицы
- •Упражнение 3 – Проверка работы триггера
- •Упражнение 4 – Создание триггера на обновление и вставку
Часть 3-7. Использование представлений Упражнение 1 – Создание представления
Представления - это ни что иное, как сохраненные команды SQL, которые иногда называют "виртуальными таблицами". Учтите, что представления не могут хранить данные (кроме индексированных представлений); они только ссылаются на данные, присутствующие в таблицах.
Представления могут быть использованы для вставки/обновления и удаления данных из таблицы.
Создали новое представление с именем HumanResources.vEmployeeDetails и добавили при определении представления параметр SCHEMABINDING.
Создание представления с опцией SCHEMABINDING блокирует таблицы, на которые ссылается представление и запрещает любые изменения схемы этих таблиц.
Два важных условия при создании представления с опцией SCHEMABINDING:
-
объекты должны указываться вместе с именами их владельцев (имя из двух частей);
использование SELECT * не допускается.
CREATE VIEW HumanResources.vEmployeeDetails
With SCHEMABINDING
As
SELECT
e.EmployeeID,
c.Title,
c.FirstName,
c.Suffix,
e.Title AS JobTitle,
c.Phone,
c.EmailAddress,
c.EmailPromotion,
a.AddressLine1,
a.AddressLine2,
a.City,
sp.Name AS StateProvinceName,
a.PostalCode,
cr.Name AS CountryRegionName,
c.AdditionalContactInfo
FROM HumanResources.Employee e
INNER JOIN Person.Contact c
ON c.ContactID=e.ContactID
INNER JOIN HumanResources.EmployeeAddress ea
on e.EmployeeID=ea.EmployeeID
INNER JOIN Person.Address a
ON ea.AddressID=a.AddressID
INNER JOIN Person.StateProvince sp
ON sp.StateProvinceID=a.StateProvinceID
INNER JOIN Person.CountryRegion cr
ON cr.CountryRegionCode=sp.CountryRegionCode
Рис. 1
Упражнение 2 – создание индексированного представления
Выполнили следующую команду:
CREATE UNIQUE CLUSTERED INDEX IX_vEmployeeDetails
ON HumanResources.vEmployeeDetails(EmployeeID)
SQL SERVER позволяет создавать индексы для представлений. Но нужно отметить одну важную особенность - первый индекс представления должен обязательно быть уникальным и кластерным.SQLSERVERне позволит вам создать любой другой индекс, пока представление не будет иметь уникальный кластерный индекс.
Рис. 2
Упражнение 3 – просмотр системной информации о представлениях
Выполнили следующие команды:
EXEC sp_depends 'HumanResources.vEmployeeDetails'
Системная процедура sp_depends перечисляет все сохраненные процедуры, которые обращаются к указанному объекту, или все объекты, к которым обращается указанная процедура.
Рис. 3
EXEC sp_helptext 'HumanResources.vEmployeeDetails'
Чтобы увидеть текст (тело) сохраненного представления, нужно вызвать системную процедуру sp_helptext.
Рис. 4
* Представления - это не что иное, как сохраненные команды SQL. Пользователь может вставлять, удалять или обновлять данные, используя представления в SQL SERVER. Индексы и триггеры также могут быть созданы для представлений, но с ограничением - первый индекс должен быть UNIQUE CLUSTERED INDEX, а триггер должен быть типа INSTEAD OF. Представления и пользовательские функции предназначены практически для одной и той же цели с той лишь разницей, что пользовательские функции могут иметь параметры