18、SQL Server 视图

SQL Server 视图

一般使用视图来支持即席查询和报表。

一、视图的用处及优点

视图最适合用于支持即席查询,而不应将其作为应用程序的核心。

即席查询创建视图时就遵循的一些原则:

1、使用视图来简化复杂连接,将数据库架构中用来连接数据的键隐藏起来

2、将复杂的聚合查询存储为视图

3、使用别名将含义模糊的列名改为易于理解的名称

4、只包含用户感兴趣的列

5、创建视图时,应尽力创建动态的视图,动态视图将有更长的生命周期

如:where 指定下个月的信息  动态。

where 指定12月的信息

开发视图的目标:

1、让用户能够轻松地获取数据以及禁止用户直接存取数据

2、通过创建提供正确数据的视图,可以防止用户错误地查询和理解数据。

二、视图的创建与使用

使用DDL (Create、Alter、Drop)管理视图

1、创建:

Create view 视图名称(列名1,列名2..)

as

select 语句

如:

create view selectbmname(部门名称)

as 

select bmname from bumen

go

select * from selectbmname

结果:

部门名称

技术部

后勤部3

管理部

销售部

后勤部

客户部

管事

2、修改

alter 

基本语法:

alter  view  视图名称 (列名,...)

as

select 语句

注:与Create语法一样,用于为视图提供新的Sql Select 语句。

如:

 go

alter view selectbmname(修改后的部门名称)

as 

select bmname from bumen

go

select * from selectbmname

结果:

修改后的部门名称

技术部

后勤部3

管理部

销售部

后勤部

客户部

管事

3、删除

drop view 视图名称

如:

 drop view selectbmname

注:在预期将要执行多次的脚本中,可使用下面的代码来删除视图并新建

 if Exists(select * from sysobjects where name='视图名称')

 drop view 视图名称

 create view ....

三、order by 与视图

视图用作其他查询的数据源,不支持视图内部对数据进行排序,

如果视图中有order by 语句,由使用该视图的Sql语句将其作用于视图。

四、视图的限制

1、视图不能包含从选定列创建新表的Select into 选项

2、视图不能引用临时表(名称中包含’#’的表)或表变量

3、视图不能包含compute 或 compte by列,相反它使用标准聚合函数和分组。

五、使用视图

把普通的视图当作一般的只可查询的表使用。

六、视图保护

关于视图选项中用于对数据及视图的保护的项。通过创建和修改视图时添加指定的

项来实现。

1、保护数据

基本语法:

在视图定义的最后加上:With Check Option

它使where子句进行双向限制,

限制1:视图只能访问满足条件的表中的行

限制2:在通过视图插入和更新数据时,只能更新满足条件的数据行。

注:默认是单向限制,只有限制1.

通过视图更新和插入数据时,和普通表格的语法一致。

如:

 create view selectbmname(修改后的部门名称)

as 

select bmname from bumen

with check option

2、保护视图

总共有三个选项用来保护视图

a、架构变更

当底层数据结构发生变化时,SQL代码往往无法正常运行,视图引用的是表中的数据

如:视图查询的列不存在,视图就无法正常运行

解决方法:通过绑定架构可锁定基表,禁止修改基表

基本语法:

在create 或 alter 与as之间添加:with schemabinding

如:

if Exists(select * from sysobjects where name='selectbmname')

drop view selectbmname

go

create view selectbmname(bmname)

with Schemabinding

as 

select bmname from dbo.bumen 

with check option

go

注:绑定的架构必须指定架构名,如这里的是dbo,

限制:1、在Select语句中引用对象时必须指定其所有者

2、不能选取所有列

b、加密视图的Select语句

创建的视图和存储过程的源代码,存储在系统表Syscomments中,任何人都可

查看,如果需要将其变成密文,可以使用此选项,

基本语法:

在create 或 alter 与as之间添加:with encryption

如:

create view selectbmname(bmname)

with encryption

as 

select bmname from dbo.bumen 

c、应用程序元数据

作用于返回架构信息时。

加上view_metadata只返回有关视图(而不是引用的表的架构信息)

如:

create view selectbmname(bmname)

with encryption,view_metadata

as 

select bmname from dbo.bumen 

注:有多个with选项时,用逗号隔开。

七、通过视图进行更新和表中的数据

一般来说,除非是简单的select语句,否则不能通过它来更新数据,更新方法

与普通表一样,只不过只能使用视图中指定的列。

八、视图性能

视图的一个重要性能与视图对数据加锁有关。

从本质上说,用视图来查找数据时,如果Select语句很快执行完毕,对数据

的锁将立即释放。

九、使用同义词

它可以替换在许多SQL语句中的一个两、三或四部分的名字。使用同义词可以让你减

少输入,而且还能提供一个抽象层来为你保护底层对象的改变。

基本语法:

Create Synonem 别名 FOR 原对象名称

当你创建同义词时,相应的对象不需要存在,因为同义词是迟绑定的:当你实际上使用同义词时,SQL Server仅仅检查基对象。

例如,在AdventureWorks示例数据库中,你可以以下列方式创建一个同义词:

CREATE SYNONYM ProdCat

FOR AdventureWorks.Production.ProductCategory


之后,你可以继续使用在SQL语句中的同义词了。例如:

SELECT * FROM ProdCat



原文地址:https://www.cnblogs.com/dyllove98/p/3137665.html