ALTER VIEW (Transact-SQL)
Изменяет ранее созданное представление, в том числе индексированное. Инструкция ALTER VIEW не влияет на зависимые хранимые процедуры или триггеры и не изменяет разрешения.
Синтаксис
ALTER VIEW [ schema_name . ] view_name [ ( column [ ,...n ] ) ]
[ WITH <view_attribute> [ ,...n ] ]
AS select_statement
[ WITH CHECK OPTION ] [ ; ]
<view_attribute> ::=
{
[ ENCRYPTION ]
[ SCHEMABINDING ]
[ VIEW_METADATA ]
}
Аргументы
schema_name
Имя схемы, к которой принадлежит представление.view_name
Представление, которое нужно изменить.column
Имя столбца или разделенные запятыми имена нескольких столбцов, входящих в состав указанного представления.Важно! Заданные для столбца разрешения сохраняются только в том случае, если после выполнения инструкции ALTER VIEW имя столбца остается таким же, каким оно было до этого.
Примечание В столбцах представления разрешения для имени столбца применяются с инструкцией CREATE VIEW или ALTER VIEW вне зависимости от источника базовых данных. Например, если в инструкции CREATE VIEW были предоставлены разрешения для столбца SalesOrderID, инструкция ALTER VIEW может переименовать этот столбец, например в OrderRef, и все же иметь разрешения, связанные с представлением, в котором используется столбец SalesOrderID.
ENCRYPTION
Если этот аргумент указан, выполняется шифрование элементов представления sys.syscomments, содержащего текст инструкции ALTER VIEW. Предложение WITH ENCRYPTION предотвращает публикацию представления при репликации SQL Server.SCHEMABINDING
Привязывает представление к схеме базовой таблицы или таблиц. Если аргумент SCHEMABINDING указан, изменить базовые таблицы таким образом, чтобы это повлияло на определение представления, нельзя. Для удаления зависимостей из таблицы, которую требуется изменить, вначале нужно изменить или удалить само представление. При применении параметра SCHEMABINDING имена таблиц, представлений или пользовательских функций, упоминаемые в аргументе select_statement, должны состоять из двух частей (schema**.**object). Все указанные в инструкции объекты должны находиться в одной базе данных.Представления или таблицы, входящие в представление, созданное при помощи предложения SCHEMABINDING, не могут быть удалены, пока это представление не будет удалено или изменено так, что больше не будет привязано к схеме. В противном случае компонент Database Engine выдаст ошибку. Кроме того, выполнение инструкций ALTER TABLE для таблиц, входящих в представления, связанные со схемами, завершается неудачей, если эти инструкции влияют на определение представления.
VIEW_METADATA
Указывает, что экземпляр SQL Server возвратит в API-интерфейсы DB-Library, ODBC и OLE DB сведения метаданных о представлении вместо базовой таблицы или таблиц, когда метаданные режима обзора затребованы для запроса, который ссылается на представление. Метаданные режима просмотра — это дополнительные метаданные, которые экземпляр компонента Database Engine возвращает клиентским API-интерфейсам DB-Library, ODBC и OLE DB. Эти метаданные позволяют клиентским API-интерфейсам реализовывать обновляемые клиентские курсоры. Метаданные режима обзора содержат сведения о базовой таблице, которой принадлежат столбцы в результирующем наборе.Для представлений, созданных с применением предложения VIEW_METADATA, метаданные режима обзора возвращают имя представления, а не имена базовых таблиц при описании столбцов из представления в результирующем наборе.
В представлении, созданном с предложением WITH VIEW_METADATA, все столбцы за исключением столбца с типом данных timestamp поддерживают обновление, если представление включает триггеры INSERT или UPDATE INSTEAD OF. Дополнительные сведения см. в подразделе «Примечания» раздела CREATE VIEW (Transact-SQL).
AS
Действия, которые должны быть выполнены в представлении.select_statement
Инструкция SELECT, определяющая представление.WITH CHECK OPTION
Обеспечивает соответствие всех выполняемых для представления инструкций, изменяющих данные, критериям, заданным в выражении select_statement.
Замечания
Дополнительные сведения об инструкции ALTER VIEW см. в подразделе «Примечания» раздела CREATE VIEW (Transact-SQL).
Примечание |
---|
Если предыдущее определение представления было создано с использованием предложения WITH ENCRYPTION или CHECK OPTION, эти параметры будут действовать только в том случае, если они включены в инструкцию ALTER VIEW. |
При изменении текущего представления с помощью инструкции ALTER VIEW компонент Database Engine осуществляет монопольную блокировку схемы представления. Если блокировка предоставлена, и с представлением в настоящий момент не работает ни один пользователь, компонент Database Engine удаляет все копии представления из кэша процедур. Существующие планы, ссылающиеся на представление, остаются в кэше, но при обращении к ним выполняется повторная компиляция.
Инструкцию ALTER VIEW можно выполнять для индексированных представлений, однако она удаляет все индексы представления.
Разрешения
Для выполнения инструкции ALTER VIEW необходимо как минимум разрешение ALTER на объект.
Примеры
В следующем примере создается представление EmployeeHireDate, содержащее фамилии и имена всех сотрудников, а также даты их приема на работу. Представлению предоставляются необходимые разрешения, но требования изменяются таким образом, чтобы из базы данных извлекались сведения только о сотрудниках, принятых на работу до определенной даты. Для замены представления используется инструкция ALTER VIEW.
USE AdventureWorks ;
GO
CREATE VIEW HumanResources.EmployeeHireDate
AS
SELECT c.FirstName, c.LastName, e.HireDate
FROM HumanResources.Employee AS e JOIN Person.Contact AS c
ON e.ContactID = c.ContactID ;
GO
Представление нужно изменить так, чтобы оно включало только сотрудников, принятых на работу до 1997 года. Если не использовать инструкцию ALTER VIEW, а удалить представление и создать его заново, нужно будет повторно выполнить инструкцию GRANT и любые другие инструкции, работающие с разрешениями данного представления.
ALTER VIEW HumanResources.EmployeeHireDate
AS
SELECT c.FirstName, c.LastName, e.HireDate
FROM HumanResources.Employee AS e JOIN Person.Contact AS c
ON e.ContactID = c.ContactID
WHERE HireDate < CONVERT(DATETIME,'19980101',101) ;
GO
См. также