ALTER VIEW (Transact-SQL)

Modifica una vista creada anteriormente. Esto incluye una vista indizada. ALTER VIEW no afecta a desencadenadores ni procedimientos almacenados dependientes y no cambia permisos. Para obtener más información acerca de los parámetros que se utilizan en la instrucción ALTER VIEW, vea CREATE VIEW (Transact-SQL).

Icono de vínculo a temasConvenciones de sintaxis de Transact-SQL

Sintaxis

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
    Es el nombre del esquema al que pertenece la vista.

  • view_name
    Es la vista que se va a cambiar.

  • column
    Es el nombre de una o más columnas, separadas por comas, que van a formar parte de la vista especificada.

    Nota importanteImportante

    Los permisos de columna se mantienen sólo cuando las columnas tienen el mismo nombre antes y después de que se ejecute ALTER VIEW.

    Nota

    En las columnas de la vista, los permisos de un nombre de columna se aplican a través de una instrucción CREATE VIEW o ALTER VIEW, independientemente del origen de los datos subyacentes. Por ejemplo, si se conceden permisos para la columna SalesOrderID en una instrucción CREATE VIEW, una instrucción ALTER VIEW puede cambiar el nombre de la columna SalesOrderID, por ejemplo, a OrderRef, y aún tener los permisos asociados con la vista utilizando SalesOrderID.

  • ENCRYPTION
    Cifra las entradas en sys.syscomments que contienen el texto de la instrucción ALTER VIEW. WITH ENCRYPTION evita que la vista se publique como parte de la replicación de SQL Server.

  • SCHEMABINDING
    Enlaza la vista al esquema de la tabla o las tablas subyacentes. Cuando se especifica SCHEMABINDING, las tablas base no se pueden modificar de forma que afecten a la definición de la vista. La propia definición de la vista debe modificarse o quitarse primero para eliminar las dependencias de la tabla que se va a modificar. Cuando se usa SCHEMABINDING, select_statement debe incluir los nombres de dos partes (schema**.**object) de las tablas, vistas o funciones definidas por el usuario a las que se hace referencia. Todos los objetos a los que se hace referencia se deben encontrar en la misma base de datos.

    Las vistas o las tablas que participan en una vista creada con la cláusula SCHEMABINDING no se pueden quitar a menos que se quite o cambie esa vista de forma que deje de tener un enlace de esquema. En caso contrario, Motor de base de datos genera un error. Además, se genera un error al ejecutar las instrucciones ALTER TABLE sobre tablas que participan en vistas que tienen enlaces de esquemas si estas instrucciones afectan a la definición de la vista.

  • VIEW_METADATA
    Especifica que la instancia de SQL Server devolverá a las API de DB-Library, ODBC y OLE DB la información de metadatos sobre la vista en vez de las tablas base cuando se soliciten los metadatos del modo de exploración para una consulta que hace referencia a la vista. Los metadatos del modo de exploración son metadatos adicionales que la instancia del Motor de base de datos devuelve a las API de DB-Library, ODBC y OLE DB de cliente. Estos metadatos permiten a las API de cliente implementar cursores de cliente actualizables. Los metadatos del modo de exploración incluyen información sobre la tabla base a la que pertenecen las columnas del conjunto de resultados.

    Para las vistas creadas con VIEW_METADATA, los metadatos del modo de exploración devuelven el nombre de vista y no los nombres de tablas base cuando describen columnas de la vista en el conjunto de resultados.

    Cuando se crea una vista utilizando WITH VIEW_METADATA, todas sus columnas (excepto una columna marca de tiempo) son actualizables si la vista tiene los desencadenadores INSERT o UPDATE INSTEAD OF. Para obtener más información, vea la sección Notas en CREATE VIEW (Transact-SQL).

  • AS
    Son las acciones que va a llevar a cabo la vista.

  • select_statement
    Es la instrucción SELECT que define la vista.

  • WITH CHECK OPTION
    Fuerza que todas las instrucciones de modificación de datos que se ejecuten en la vista sigan los criterios establecidos en select_statement.

Comentarios

Para obtener más información acerca de ALTER VIEW, vea la sección Notas en CREATE VIEW (Transact-SQL).

Nota

Si la anterior definición de vista se creó utilizando WITH ENCRYPTION o CHECK OPTION, estas opciones sólo se habilitan si se incluyen en ALTER VIEW.

Si una vista que está actualmente en uso se modifica mediante ALTER VIEW, el Motor de base de datos impone un bloqueo exclusivo de esquema sobre la vista. Cuando se concede el bloqueo, y no hay usuarios activos de la vista, el Motor de base de datos elimina todas las copias de la vista de la caché de procedimientos. Los planes existentes que hacen referencia a la vista permanecen en la caché, pero se vuelven a compilar cuando se llaman.

ALTER VIEW se puede aplicar a vistas indizadas; no obstante, quita incondicionalmente todos los índices de la vista.

Permisos

Para ejecutar ALTER VIEW, como mínimo, se necesita el permiso ALTER en OBJECT.

Ejemplos

En el siguiente ejemplo se crea una vista que contiene todos los empleados y sus fechas de contratación denominada EmployeeHireDate. Se conceden permisos sobre la vista, pero los requisitos se han cambiado para seleccionar los empleados que tienen fechas de contratación anteriores a una fecha determinada. A continuación, se usa ALTER VIEW para reemplazar la vista.

USE AdventureWorks2008R2 ;
GO
CREATE 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 ;
GO

La vista debe cambiarse para que incluya sólo a los empleados que se contrataron antes de 2002. Si no se usa ALTER VIEW, sino que la vista se quita y se vuelve a crear, deben volver a crearse la instrucción GRANT usada anteriormente y cualquier otra instrucción relacionada con permisos pertenecientes a esta vista.

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,'20020101',101) ;
GO