ALTER VIEW (Transact-SQL)

Modifica uma exibição criada anteriormente. Isto inclui uma exibição indexada. ALTER VIEW não afeta disparadores ou procedimentos armazenados dependentes e não altera permissões.

Ícone de vínculo de tópicoConvenções de Sintaxe Transact-SQL

Sintaxe

ALTER VIEW [ schema_name . ] view_name [ ( column [ ,...n ] ) ] 
[ WITH <view_attribute> [ ,...n ] ] 
AS select_statement 
[ WITH CHECK OPTION ] [ ; ]

<view_attribute> ::= 
{ 
    [ ENCRYPTION ]
    [ SCHEMABINDING ]
    [ VIEW_METADATA ]     
} 

Argumentos

  • schema_name
    É o nome do esquema ao qual a exibição pertence.

  • view_name
    É a exibição a ser alterada.

  • column
    É o nome de uma ou mais colunas, separadas por vírgulas, que farão parte da exibição especificada.

    Observação importanteImportante

    As permissões de coluna serão mantidas apenas quando as colunas tiverem o mesmo nome antes e depois que ALTER VIEW for executado.

    ObservaçãoObservação

    Nas colunas da exibição, as permissões de um nome de coluna são aplicadas por uma instrução CREATE VIEW ou ALTER VIEW, independentemente da fonte dos dados subjacentes. Por exemplo, se forem concedidas permissões na coluna SalesOrderID em uma instrução CREATE VIEW, uma instrução ALTER VIEW poderá renomear a coluna SalesOrderID , tal como para OrderRef, e ainda terá as permissões associadas à exibição usando SalesOrderID.

  • ENCRYPTION
    Criptografa as entradas em sys.syscomments que contêm o texto da instrução ALTER VIEW. O uso de WITH ENCRYPTION impede que a exibição seja publicada como parte da replicação do SQL Server.

  • SCHEMABINDING
    Associa a exibição ao esquema da tabela ou tabelas subjacentes. Quando SCHEMABINDING for especificado, as tabelas base não poderão ser modificadas de um modo que possa afetar a definição da exibição. A própria definição da exibição deve primeiramente ser modificada ou descartada a fim de remover dependências na tabela a ser modificada. Ao usar SCHEMABINDING, a select_statement deve incluir os nomes de duas partes (schema**.**object) das tabelas, exibições ou funções definidas pelo usuário que forem referenciadas. Todos os objetos referenciados devem estar no mesmo banco de dados.

    As exibições ou tabelas que participam de uma exibição, criadas com a cláusula SCHEMABINDING não podem ser descartadas, a menos que a exibição seja descartada ou alterada, de tal forma que não mais tenha associação de esquema. Caso contrário, o Mecanismo de Banco de Dados gera um erro. Além disso, haverá falha na execução de instruções ALTER TABLE nas tabelas que participam de exibições com associação de esquema se essas instruções afetarem a definição da exibição.

  • VIEW_METADATA
    Especifica que a instância do SQL Server retornará às APIs do DB-Library, ODBC e OLE DB as informações de metadados sobre a exibição, em vez de a tabela ou tabelas base, quando metadados do modo de procura forem solicitados para uma consulta que faça referência à exibição. Metadados do modo de procura são metadados adicionais que a instância do Mecanismo de Banco de Dados retorna às APIS do DB-Library, ODBC e OLE DB do lado do cliente. Esses metadados permitem que as APIs do lado do cliente implementem cursores atualizáveis do lado do cliente. Os metadados do modo de procura incluem informações sobre a tabela base às quais as colunas do conjunto de resultados pertencem.

    Para exibições criadas com VIEW_METADATA, os metadados do modo de procura retornam o nome da exibição e não os nomes de tabela base quando descreverem colunas da exibição no conjunto de resultados.

    Quando uma exibição for criada com WITH VIEW_METADATA, todas as suas colunas, com exceção de uma coluna timestamp, serão atualizáveis se a exibição tiver disparadores INSERT ou UPDATE INSTEAD OF. Para obter mais informações, consulte a seção de comentários em CREATE VIEW (Transact-SQL).

  • AS
    São as ações que a exibição deve efetuar.

  • select_statement
    É a instrução SELECT que define a exibição.

  • WITH CHECK OPTION
    Força que todas as instruções de modificação de dados que são executadas em relação à exibição sigam o conjunto de critérios da select_statement.

Comentários

Para obter mais informações sobre ALTER VIEW, consulte Comentários em CREATE VIEW (Transact-SQL).

ObservaçãoObservação

Se a definição da exibição anterior foi criada com WITH ENCRYPTION ou CHECK OPTION, essas opções estarão habilitadas apenas se foram incluídas em ALTER VIEW.

Se uma exibição usada atualmente for modificada com ALTER VIEW, o Mecanismo de Banco de Dados obterá um bloqueio de esquema exclusivo na exibição. Quando o bloqueio for concedido e não houver usuários ativos da exibição, o Mecanismo de Banco de Dados excluirá todas as cópias da exibição do cache de procedimento. Os planos existentes que façam referência à exibição permanecerão no cache, mas serão recompilados quando invocados.

ALTER VIEW pode ser aplicado a exibições indexadas; entretanto, ALTER VIEW descarta incondicionalmente todos os índices da exibição.

Permissões

Para executar ALTER VIEW, é necessária, no mínimo, permissão ALTER em OBJECT.

Exemplos

O exemplo a seguir cria uma exibição que contém todos os funcionários e suas datas de contratação, denominadas EmployeeHireDate. São concedidas permissões para a exibição, mas os requisitos serão alterados para selecionar funcionários cujas datas de contratação sejam anteriores a uma determinada data. Então, ALTER VIEW é usado para substituir a exibição.

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

A exibição deve ser alterada para incluir apenas os funcionários que foram contratados antes de 1997. Se ALTER VIEW não for usado, mas em vez disso a exibição for descartada e recriada, a instrução GRANT usada anteriormente e quaisquer outras instruções que lidem com permissões pertencentes a essa exibição deverão ser inseridas novamente.

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