|
По материалам статьи Navneeth Diwaker
Naik SQL
Server 2000: View Basics Представления - это не что иное, как сохраненные команды SQL, которые иногда называют "виртуальными таблицами". Учтите, что представления не могут хранить данные (кроме индексированных представлений); они только ссылаются на данные, присутствующие в таблицах.
Создание представлений с опцией ENCRYPTION Индексированные представления Варианты использования представлений Триггер INSTEAD OF на представлении Ограничения представлений Представления и пользовательские функции Заключение Давайте рассмотрим базовый синтаксис создания представления: CREATE VIEW View_Name AS SELECT Statement GO Есть две важные опции, которые могут быть использованы при создании представления. Это SCHEMABINDING и ENCRYPTION. Мы рассмотрим каждую из них подробно, но сначала разберем пример создания обычного представления без опций. USE Northwind GO CREATE VIEW vwSample As SELECT CustomerID, CompanyName, ContactName FROM CUSTOMERS GO Этот скрипт создает представление vwSample. Теперь вместо использования полной команды SELECT можно воспользоваться следующей командой: SELECT * from vwSample Пожалуйста, удалите это представление, если вы выполняете мои примеры на своем компьютере, потому что я буду использовать одно и то же имя во всей главе. DROP VIEW vwSample Создание представлений с опцией SCHEMABINDING Создание представления с опцией SCHEMABINDING блокирует таблицы, на которые ссылается представление и запрещает любые изменения схемы этих таблиц. Обратите внимание на два важных условия при создании представления с опцией SCHEMABINDING:
Ниже приведен пример представления с опцией SCHEMABINDING: CREATE VIEW vwSample With SCHEMABINDING As SELECT CustomerID, CompanyName, ContactName FROM DBO.CUSTOMERS -- Имя из двух частей (владелец.объект) GO Эта команда создает представление vwSample. После создания представления попробуйте изменить таблицу CUSTOMERS, это не удастся. Это результат опции SCHEMABINDING. Т.к. vwSample ссылается на таблицу CUSTOMERS, то вы не можете выполнять команду ALTER на таблице CUSTOMERS. Не забудьте удалить представление. DROP VIEW vwSample Создание представлений с опцией ENCRYPTION Эта опция зашифровывает определение представления. Пользователи не смогут просмотреть определение представления после его создания. USE NORTHWIND GO CREATE VIEW vwSample With ENCRYPTION As SELECT CustomerID, CompanyName, ContactName FROM DBO.CUSTOMERS GO SELECT * FROM SYSCOMMENTS WHERE ID = (SELECT ID FROM SYSOBJECTS WHERE XTYPE = 'V' AND NAME = 'vwSample') Определение представления будет сохранено в зашифрованном формате в системной таблице syscomments. Внимание: после шифрования определения расшифровать его уже нельзя. Поэтому будьте очень осторожны при использовании опции ENCRYPTION. Не забудьте удалить представление. DROP VIEW vwSample SQL SERVER 2000 позволяет создавать индексы для представлений. Предыдущие версии SQL SERVER не позволят делать это. Но нужно отметить одну важную особенность - первый индекс представления должен обязательно быть уникальным и кластерным. SQL SERVER 2000 не позволит вам создать любой другой индекс, пока представление не будет иметь уникальный кластерный индекс. Давайте рассмотрим пример индексированного представления: CREATE VIEW vwSample As SELECT CustomerID, CompanyName, ContactName FROM DBO.CUSTOMERS GO CREATE UNIQUE CLUSTERED INDEX indClustered ON NORTHWIND.DBO.VWSAMPLE (CUSTOMERID) GO Эта команда создает уникальный кластерный индекс для представления. Не забудьте удалить представление. DROP VIEW vwSample Варианты использования представлений Представления могут быть использованы для вставки/обновления и удаления данных из таблицы. Давайте подробно разберем, как это делать. Сначала рассмотрим, как вставить данные в таблицу, используя представление. Следующий скрипт создаст таблицу TEST и представление vwSample. USE NORTHWIND GO CREATE TABLE [Test] ( TestID INT, TestName VARCHAR (100) ) GO CREATE VIEW vwTest As SELECT TestID, TestName FROM Test GO Теперь вставим данные в таблицу Test, используя представление. Выполните следующую команду. Она вставит данные в таблицу Test. INSERT INTO vwTest VALUES (1, 'Test 1') SELECT * from Test TestID TestName ------------------------------- 1 Test 1 Теперь обновим данные, используя то же представление. UPDATE vwTest SET TestName = 'New Value' WHERE TestID = 1 SELECT * from Test TestID TestName -------------------------------- 1 New Value Таким же образом мы можем удалить данные из таблицы, используя то же самое представление. Не забудьте удалить представление. DROP VIEW vwTest Триггер INSTEAD OF на представлении SQL SERVER 2000 позволяет создавать триггеры на представлениях. Предыдущие версии SQL SERVER не позволяли делать это. Это является новой особенностью SQL SERVER 2000. Но помните, что вы можете создать только триггеры INSTEAD OF на представлениях. CREATE VIEW vwSample As SELECT CustomerID, CompanyName, ContactName FROM DBO.CUSTOMERS GO Существуют некоторые ограничения при использовании представлений. Вот они:
Представления и пользовательские функции Представления и пользовательские функции используются почти для одной и той же цели. Главным отличием является то, что пользовательские функции могут получать параметры, а представления нет. Также результат пользовательской функции может быть напрямую использован в команде SELECT, что невозможно сделать с представлением. Представления - это не что иное, как сохраненные команды SQL. Пользователь может вставлять, удалять или обновлять данные, используя представления в SQL SERVER 2000. Индексы и триггеры также могут быть созданы для представлений, но с ограничением - первый индекс должен быть UNIQUE CLUSTERED INDEX, а триггер должен быть типа INSTEAD OF. Представления и пользовательские функции предназначены практически для одной и той же цели с той лишь разницей, что пользовательские функции могут иметь параметры, а представления нет. Navneeth Diwaker Naik (navneeth_naik@satyam.com) является сотрудником Satyam Computers Services Limited, Hyderabad, Andhra Pradesh (Индия). |
Перевод: Виталия Степаненко 2004г. |