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 会报错:
因为 子句过滤了 a% 内容,而 插入的ss不符合 这个过滤的条件,所以会报错.
如果想知道某一个视图的作用,那么可以用如下方法:
1.
use test go exec sp_helptext v4(视图名)
返回如下信息:
2.
select * from sys.sql_modules where [object_id]= object_id('v4')
结果如下:
加密视图:
新建一个加密的视图:
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')
查看视图时:
definition变成了空值,无法看到视图到底做了些什么.
如果对视图使用了alter 命令,那么 如果不使用加密,那么 修改后的视图,将变成非加密的.