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