适用于:SQL Server
Azure SQL 数据库
Azure SQL 托管实例
Azure Synapse Analytics
分析平台系统(PDW)
Microsoft Fabric 中的 SQL 分析终结点
Microsoft Fabric 中的仓库
Microsoft Fabric 中的 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 ]
}
-- Syntax for Azure Synapse Analytics and Parallel Data Warehouse and Microsoft Fabric
ALTER VIEW [ schema_name . ] view_name [ ( column_name [ ,...n ] ) ]
AS <select_statement>
[;]
参数
schema_name
视图所属架构的名称。
view_name
要更改的视图。
column
将成为指定视图的一部分的一个或多个列的名称(以逗号分隔)。
重要
只有当列在执行前后 ALTER VIEW 名称相同时,列权限才会被保留。
备注
在视图的列中,无论基础数据的源如何,列名称的权限都会应用于 CREATE VIEW 或 ALTER VIEW 语句中。 例如,如果语句中的 SalesOrderID 列 CREATE VIEW 获得了权限,语 ALTER VIEW 句可以将 SalesOrderID 列重命名为 OrderRef,但仍保留使用 SalesOrderID 与视图关联的权限。
ENCRYPTION
适用于:SQL Server 2008 (10.0.x) 及更高版本和 Azure SQL 数据库。
加密包含语句文本的 ALTER VIEW 中的条目。 WITH ENCRYPTION 可防止视图作为 SQL Server 复制的一部分进行发布。
SCHEMABINDING
将视图绑定到基础表的架构。 如果指定了 SCHEMABINDING,则不能以可影响视图定义的方式来修改基表。 必须首先修改或删除视图定义本身,然后才能删除要修改的表的相关性。 使用 SCHEMABINDING 时,select_statement 必须包含所引用的表、视图或用户定义函数的两部分名称 (schema.object)。 所有被引用对象都必须在同一个数据库内。
不能删除参与使用 SCHEMABINDING 子句创建的视图的表或视图,除非该视图已被删除或更改,而不再具有架构绑定。 否则,数据库引擎将引发错误。 此外,在参与具有模式绑定的视图的表上执行 ALTER TABLE 语句,如果这些语句影响了视图定义,则会失败。
VIEW_METADATA
指定为引用视图的查询请求浏览模式的元数据时,SQL Server 实例将向 DB-Library、ODBC 和 OLE DB API 返回有关视图的元数据信息,而不返回基表的元数据信息。 浏览模式的元数据是数据库引擎实例返回到客户端 DB-Library、ODBC 和 OLE DB API 的额外元数据。 如果使用此元数据,客户端 API 将可以实现可更新客户端游标。 浏览模式的元数据包含结果集中的列所属的基表的相关信息。
对于使用 VIEW_METADATA 创建的视图,浏览模式的元数据在描述结果集内视图中的列时,将返回视图名,而不返回基表名。
当视图使用WITH VIEW_METADATA创建时,除时间 戳 列外,所有列都可以更新,前提是视图有 INSERT 或 UPDATE 代替了OF。 更多信息请参见(Transact-SQL)中的CREATE VIEW备注部分。
AS
视图要执行的操作。
select_statement
定义视图的 SELECT 语句。
带有检查选项
要求对该视图执行的所有数据修改语句都必须符合 select_statement 中所设置的条件。
备注
有关ALTER VIEW的更多信息,请参见(Transact-SQL)中的CREATE VIEW备注。
备注
如果之前的视图定义是通过使用WITH ENCRYPTION或CHECK OPTION创建的,则这些选项只有在包含在 ALTER VIEW中时才会被启用。
如果使用当前使用的视图进行了ALTER VIEW修改,则数据库引擎对视图采用独占架构锁。 在授予锁时,如果该视图没有活动用户,则数据库引擎将从过程缓存中删除该视图的所有副本。 引用该视图的现有计划将继续保留在缓存中,但一旦被调用就会重新编译。
ALTER VIEW 可应用于索引视图;但是, ALTER VIEW 无条件地删除视图上的所有索引。
权限
若要执行 ALTER VIEW,至少需要对 OBJECT 的 ALTER 权限。
示例
以下示例创建一个包含所有雇员及其雇佣日期(称为 EmployeeHireDate)的视图。 为该视图授予权限,但是要求更改为选择雇佣日期在某个日期之前的雇员。 然后,使用 ALTER VIEW 替换该视图。
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
必须将视图更改为只包括在 2002 年之前雇佣的雇员。 如果 ALTER VIEW 未使用,而是丢弃视图并重新创建,则必须重新输入之前使用的 GRANT 语句及与该视图相关的权限语句。
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
另请参阅
CREATE TABLE (Transact-SQL)
CREATE VIEW (Transact-SQL)
DROP VIEW (Transact-SQL)
创建存储过程
SELECT (Transact-SQL)
EVENTDATA (Transact-SQL)
对发布数据库进行架构更改