ALTER VIEW (Transact-SQL)

Se aplica a:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)Punto de conexión de análisis SQL en Microsoft FabricAlmacenamiento en Microsoft Fabric

Modifica una vista creada anteriormente. Esto incluye una vista indizada. ALTER VIEW no afecta a desencadenadores ni procedimientos almacenados dependientes y no cambia permisos.

Convenciones 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 ]       
}   
-- Syntax for Azure Synapse Analytics and Parallel Data Warehouse and Microsoft Fabric
  
ALTER VIEW [ schema_name . ] view_name [  ( column_name [ ,...n ] ) ]   
AS <select_statement>   
[;]  

Nota:

Para ver la sintaxis de Transact-SQL para SQL Server 2014 (12.x) y versiones anteriores, consulte Versiones anteriores de la documentación.

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.

Importante

Los permisos de columna se mantienen solo 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 mediante 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 usando SalesOrderID.

ENCRYPTION
Se aplica a: SQL Server 2008 (10.0.x) y versiones posteriores, y Azure SQL Database.

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 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 en dos partes (schema.object) de las tablas, las vistas o las 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 del lado cliente. Estos metadatos permiten a las API del lado cliente implementar cursores del lado 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 mediante WITH VIEW_METADATA, todas sus columnas (excepto una columna timestamp) son actualizables si la vista tiene los desencadenadores INSERT o UPDATE INSTEAD OF. Para más información, vea la sección Comentarios de 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 más información sobre ALTER VIEW, consulte la sección Comentarios de CREATE VIEW (Transact-SQL).

Nota

Si la anterior definición de vista se creó utilizando WITH ENCRYPTION o CHECK OPTION, estas opciones solo 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 utiliza ALTER VIEW para reemplazar la vista.

USE AdventureWorks2022;  
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 solo a los empleados que se contrataron antes de 2002. Si no se utiliza ALTER VIEW, sino que la vista se quita y se vuelve a crear, deben volver a crearse la instrucción GRANT utilizada 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  

Consulte también

CREATE TABLE (Transact-SQL)
CREATE VIEW (Transact-SQL)
DROP VIEW (Transact-SQL)
Crear un procedimiento almacenado
SELECT (Transact-SQL)
EVENTDATA (Transact-SQL)
Realizar cambios de esquema en bases de datos de publicaciones