ALTER VIEW (Transact-SQL)

适用于:SQL ServerAzure SQL 数据库Azure SQL 托管实例Azure Synapse Analytics分析平台系统(PDW)Microsoft Fabric 中的 SQL 分析终结点Microsoft Fabric 中的仓库Microsoft Fabric 中的 SQL 数据库

修改先前创建的视图。 其中包括索引视图。 ALTER VIEW 不影响依赖的存储过程或触发器,也不更改权限。

Transact-SQL 语法约定

语法

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)
对发布数据库进行架构更改