SQLServer之修改视图

修改视图注意事项

修改先前建立的视图。 其中包括索引视图。 ALTER VIEW不影响相关的存储过程或触发器,而且不会更改权限。数据库

若是原来的视图定义是使用 WITH ENCRYPTION 或 CHECK OPTION建立的,则只有在 ALTER VIEW 中也包含这些选项时,才会启用这些选项。缓存

若是当前所用的视图使用 ALTER VIEW 来修改,则数据库引擎使用对该视图的排他架构锁。 在授予锁时,若是该视图没有活动用户,则数据库引擎将从过程缓存中删除该视图的全部副本。 引用该视图的现有计划将继续保留在缓存中,但一旦被调用就会从新编译。架构

ALTER VIEW可应用于索引视图,可是,ALTER VIEW会无条件地删除视图的全部索引。函数

若要执行 ALTER VIEW,至少须要具备对 OBJECT 的 ALTER 权限。工具

使用SSMS数据库管理工具修改视图

一、链接数据库,选择数据库,展开数据库-》展开视图-》选择要修改的视图-》选择设计。加密

clipboard.png

二、在关系图窗格中-》修改视图-》修改完成,点击保存。spa

clipboard.png

三、使用修改的视图。设计

clipboard.png

使用T-SQL脚本修改视图

语法:

--声明数据库引用
use 数据库名;
go对象

--修改视图
alter view 架构名视图名
with encryption,schemabinding,view_metadata
as
select_statement
[check option];
goblog

语法解析:

schema_name
视图所属架构的名称。

view_name
要更改的视图。

column
将成为指定视图的一部分的一个或多个列的名称(以逗号分隔)。

encryption
适用范围: SQL Server 2008 到 SQL Server 2017 和 Azure SQL Database。

加密 sys.syscomments 中包含 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 INSTEAD OF 触发器,则视图的全部列(timestamp 列除外)均可更新。 有关详细信息,请参阅 CREATE VIEW (Transact-SQL) 中的“注释”部分。

as
视图要执行的操做。

select_statement
定义视图的 SELECT 语句。

with check option
要求对该视图执行的全部数据修改语句都必须符合 select_statement 中所设置的条件。

示例:

--声明数据库引用
use testss;
go

--修改视图
alter view dbo.view1
with encryption,schemabinding,view_metadata
as
select a.id,a.name,a.sex,a.height,b.id as classid
from dbo.test1 as a
inner join dbo.test3 as b on a.classid=b.id;
go

使用修改后的视图

clipboard.png

相关文章
相关标签/搜索