Источники информации о представлениях
Обозреватель объектов SQL Server Management Studio
Представления каталога
Представление каталога | Отображение сведений о |
sys.views | Информация обо всех представлениях в базе данных |
sys.columns | Информация о столбцах таблиц и представлений, типе данных столбцов |
sys.sql_expression_dependencies | Информация о зависимостях между объектами следующих типов: · привязанные к схеме сущности; · сущности без привязки к схеме; · зависимости на уровне столбцов в сущностях, привязанных к схеме. |
sys.sql_modules | Содержит текст инструкции SELECT всех представлений |
Функции динамического управления
Функция | Отображение сведений о |
sys.dm_sql_referenced_entities | Информация об объектах следующих типов, упоминаемых заданной сущностью: · сущности, привязанные к схеме; · сущности без привязки к схеме; · зависимости уровня столбца, как связанные, так и не связанные со схемами; · определяемые пользователем типы; · коллекции XML-схем; · функции секционирования. |
Создание предавлений
Также как и таблица, представление может включать не более 1 024 столбцов.
Создание представления осуществляется при помощи команды CREATE VIEW:
CREATE VIEW [ schema_name . ] view_name [ (column [ ,...n ] ) ]
[ WITH [ ENCRYPTION ] [ SCHEMABINDING ] ]
AS select_statement
[ WITH CHECK OPTION ]
schema_name
Имя схемы, которой принадлежит представление.
view_name
Имя представления. Имена представлений должны соответствовать требованиям, предъявляемым к идентификаторам. Указывать имя владельца представления не обязательно.
column
Имя, которое будет иметь столбец в представлении. Имя столбца требуется только в тех случаях, когда столбец формируется на основе арифметического выражения, функции или константы, если два или более столбцов могут по иной причине получить одинаковые имена (как правило, в результате соединения) или если столбцу представления назначается имя, отличное от имени столбца, от которого он произведен. Назначать столбцам имена можно также в инструкции SELECT.
Если аргумент column не указан, столбцам представления назначаются такие же имена, которые имеют столбцы в инструкции SELECT.
AS
Определяет действия, которые должны быть выполнены в представлении.
select_statement
Инструкция SELECT, которая определяет представление. Представление не обязательно является простым подмножеством строк и столбцов одной конкретной таблицы. С помощью предложения SELECT можно создавать представление, использующее более одной таблицы, или другие представления любой степени сложности.
В аргументе select_statement можно использовать функции и множественные инструкции SELECT, разделенные оператором UNION или UNION ALL.
CHECK OPTION
Обеспечивает соответствие всех выполняемых для представления инструкций модификации данных критериям, заданным при помощи аргумента select_statement. Если строка изменяется посредством представления, предложение WITH CHECK OPTION гарантирует, что после фиксации изменений доступ к данным из представления сохранится, т.е. строка не может быть изменена таким образом, что перестанет подпадать под критерий выборки. Любые обновления, произведенные непосредственно в базовых таблицах представления, не проверяются в контексте представления — даже в том случае, если указано предложение CHECK OPTION.
ENCRYPTION
Затемняет текст инструкции CREATE VIEW хранящийся в базе данных. Непривилегированные пользователи не смогут получить исходный текст триггера.
SCHEMABINDING
Привязывает представление к схеме базовой таблицы или таблиц. Если аргумент SCHEMABINDING указан, нельзя изменить базовую таблицу или таблицы таким способом, который может повлиять на определение представления. Сначала нужно изменить или удалить само представление для сброса зависимостей от таблицы, которую требуется изменить. При использовании аргумента SCHEMABINDING инструкция select_statement должна включать двухкомпонентные (schema.object) имена таблиц, представлений или пользовательских функций, упоминаемых в предложении. Все указанные в инструкции объекты должны находиться в одной базе данных.
Как было рассмотрено в начале модуля, если представление зависит от удаленной таблицы или представления, компонент Database Engine в ответ на попытку использования представления возвращает сообщение об ошибке. Также ошибка произойдет при попытке использования представления, если из базовой таблицы были удалены столбцы, используемые в представлении. SQL Server не препятствует такому изменению или удалению таблиц, участвующих в представлении, и ошибка будет обнаружена только при обращении к представлению. Указание аргумента SCHEMABINDING позволяет избежать подобных ошибок, поскольку представления или таблицы, входящие в представление, созданное при помощи предложения SCHEMABINDING, не могут быть удалены, пока это представление не будет удалено или изменено таким образом, чтобы оно более не было привязано к схеме. В противном случае компонент Database Engine выдаст ошибку. Кроме того, выполнение инструкций ALTER TABLE для таблиц, которые входят в представления, привязанные к схемам, завершается ошибкой, если эти инструкции влияют на определение представления.
Аргумент SCHEMABINDING нельзя указывать, если представление содержит столбцы с псевдонимами типов данных.
Пример:
В следующем примере создается представление EmployeeHireDate, содержащее фамилии и имена всех сотрудников, а также даты их приема на работу.
CREATE VIEW EmployeeHireDate
AS
SELECT p.FirstName, p.LastName, e.HireDate
FROM HumanResources.Employee AS e JOIN Person.Person AS p
ON e.BusinessEntityID = p.BusinessEntityID ;
Изменение представлений
Инструкция ALTER VIEW позволяет изменять ранее созданные представления, и имеет синтаксис аналогичный инструкции создания представления CREATE VIEW.
ALTER VIEW [ schema_name . ] view_name [ ( column [ ,...n ] ) ]
[ WITH [ ENCRYPTION ] [ SCHEMABINDING ] ]
AS select_statement
[ WITH CHECK OPTION ]
Если предыдущее определение представления было создано с использованием предложения WITH ENCRYPTION или CHECK OPTION, эти параметры будут действовать только в том случае, если они включены в инструкцию ALTER VIEW.
Пример:
В следующем примере представление EmployeeHireDate, содержащее фамилии и имена всех сотрудников, а также даты их приема на работу, модифицируется таким образом, чтобы из базы данных извлекались сведения только о сотрудниках, принятых на работу до 2009 года.
ALTER VIEW HumanResources.EmployeeHireDate
AS
SELECT p.FirstName, p.LastName, e.HireDate
FROM HumanResources.Employee AS e JOIN Person.Person AS p
ON e.BusinessEntityID = p.BusinessEntityID
WHERE HireDate < CONVERT(DATETIME,'20090101',101) ;
GO
Удаление представлений
Удаление представлений из базы производится инструкцией DROP VIEW:
DROP VIEW [ schema_name . ] view_name [ ...,n ]
schema_name
Имя схемы, к которой принадлежит представление.
view_name
Имя удаляемого представления.
Пример:
В следующем примере удаляется представление EmployeeHireDate из реляционной схемы HumanResources.
DROP VIEW HumanResources.EmployeeHireDate;