sql server 2008学习9 视图

创建简单视图:

use test go create view v1(视图名) as select name from b

 

这样视图就创建好了.

下面说下视图的本质:

当执行  select * from v1 时,  那么实质上市告诉 sql server 把执行 select name from b 语句返回的结果

给我.

 

视图就像在命令执行的查询那样运行---没有任何的预先优化过程.这意味着数据在请求和所交付的数据之间增加额额外

的一层系统开销,而视图的运行总是比 执行运行内部的sql 更慢.视图存在的理由就是---对于用户是安全或者简化的.

    • 视图可以隐藏敏感数据, 
    • 作为过滤器   例子如下:
                 use test
                     go
                     create view v2
                     as
                     select name from b where id=2

总结:视图实际上 只是一个用户不可见的 select语句.

更加复杂的视图:

对视图进行 insert update delete

使用 with check potion 限制插入到视图中的内容。-- 为了通过使用视图更新或者插入数据,结果行必须符合要求

以显示在视图结果中.  也就是插入或者更新的行 必须满足视图中select语句的where条件,

看创建一个视图,sql:

create view v4
as 
select name from a 
where name like 'a%'
with check option

那么现在 向视图插入一条数据:

insert into v4(name) values('ss')

那么sql 会报错:

image

因为 子句过滤了  a% 内容,而 插入的ss不符合 这个过滤的条件,所以会报错.

如果想知道某一个视图的作用,那么可以用如下方法:

1.

use  test
go
exec sp_helptext v4(视图名)
返回如下信息:
image
 
2.
select * from sys.sql_modules where [object_id]= object_id('v4')

结果如下:

image

 

加密视图:

新建一个加密的视图:

create view v5
with encryption
as 
select name from a 
where name like 'a%'
with check option
 
在运行
select * from sys.sql_modules where [object_id]= object_id('v5')
查看视图时:

image

definition变成了空值,无法看到视图到底做了些什么.

如果对视图使用了alter 命令,那么 如果不使用加密,那么 修改后的视图,将变成非加密的.

posted @ 2012-09-11 12:30  左正  阅读(205)  评论(0编辑  收藏  举报