很多人特别喜欢用视图,但有的人从来不用视图.这都是两种不良的习惯. 要明确视图可以完成的工作以及使用场合.
1.阻止选择保密列
2.降低用户读取数据库内数据的复杂性
3.在数据库中添加索引以加速查询性能
视图的核心在于它仅是一个被存储的查询. 其最大特点是是你可以混合机匹配基表(或其他视图)中的数据,从多方面考虑,其功能就像另外一张基表.你既可以创建一个只从表中选择一些列的简单查询,也可以创建一个连接多张表并让这些表显示为一张表的复杂查询.
视图是一个虚拟表,其内容有查询定义.同真实的表一样,视图包含一系列带有名称的列和行数据.视图在数据库中并不是以数据值存储集形式存在,除非是索引视图.行和列数据来自于自定义视图的查询所引用的表,并且在引用视图时动态生成.
对其中所引用的基础表来说视图的作用类似于筛选。定义视图的筛选可以来自当前或其他数据库一个或多个表,或者其他视图.分布式查询页可用于定义使用多个异类源数据的视图.例如,如果有多台不同的服务器分别储存在你的单位在不用地区的数据,而你需要将这些服务器上结构相似的数据组合起来,那么这种方式就很有用.
通过视图进行查询没有任何限制,而且通过他们经行数据修改时的限制也很少.
视图创建语法与 Create 语句相似,
Create View <view name>
As
<Select statement>
当然,上面的语句只代表创建视图的语法的一部分,但它仍然是最常用的形式. 扩展如下
Crete View[schema_name.]<view name>[(<column name list>)]
[With[Encryption][,Schemabinding][,View_Metadata]]
as
<Select statement>
With Check Option
关于创建视图,修改视图 值得注意的地方
1.不能将规则获得Default定义关联于视图
2.定义视图的查询不能有Order by,Compute,Compute by 语句
3.如果视图的某一列是一个算术表达式,构造函数或者常数,而且视图中两个或者更多不用的列拥有一个相同的名字(这种情况通常是因为在视图的定义有一个连接,而且这两个或者多个来自不同表的列用于相同的名称) --此时需要为视图的每一列指定列的名称
4.在修改视图时需要包含<With encryption> 和 <With Check Option>从句
5.Alter View 期待找到现有的视图,而Create不需要
6.Alter 保留已经为视图建立的许可权 --如果你执行Drop,然后再使用Create 就几乎用油使用Alter View 语句相同的效果.问题在于,你需要为可以和不可以使用的人重建许可权
7.Alter View 保留任何依赖信息
8.-
简单的例子, 例如 操作AdventureWorks 操作人员仅可以创建某个表的视图,但不能授予此人访问这些表中所有的权限.
Use AdventureWorks;
Go
If Object_ID ('hiredate_view','view') is not null
Drop View hiredate_view ;
Go
Create View Hiredate _View
As
Select c.FirstName,c.LastName,e.Employee,e.HireDate
From HumanResources.Emplyee e Join Person.Contact c
on e.ContatctID = c.ContactID;
Go
注意的是:在查询分析器中执行的Create语句,就像我们所有已经用过的Create语句一样,不返回任何行,它只显示以及你给创建了该视图
The command(s) complteted successfully.
现在切换到表格视图,从而可以看见多个结果集.在你的视图上运行Select语句(就像在一张表一样),并选择表InstruName中的结果.
Select * from hiredate_view