数据库视图详解

执行视图:

保护视图:

with check option导致视图where自居不但筛选检索的数据,还在通过视图插入和更新数据时进行检查。即进行双向限制。

在创建视图的时候,如果在management stdio设计器中进行创建,如果在属性窗口中启用了with schemabinding(绑定到架构)选项。那么我们在修改表的结构的时候,系统就会提示无法修改,系统就会保护视图

我们所创建的视图的代码都可以再系统表中找到:存储在SysComments中

eg:select Text from SysComments

join SysObjects on SysObjects.ID=SysComments.ID

where Name='ViewName'

即可得到ViewName的源代码

但是如果我们在创建视图的时候加上了with encryption的话,就无法得到源代码 ,而是一堆乱码

不过值得注意的是,如果加了这个限制之后,我们就无法修改这个视图了。

 

通过视图进行更新:

人们经常抱怨,不能通过视图来更新数据。事实上,除非视图包含的是简单的select语句,否则不能通过它来实现数据的更新

下列因素将导致视图不可更新:

1.只能更新一个表。如果视图使用了连接,引用视图的update语句只能跟新其中的一个表

2.针对视图或基表的instead of触发器将改变数据修改操作,在这种情况下,将执行instead of触发器中的代码,而不执行提交的数据更新

3.如果试图包含聚合函数或group by子句,视图将是不可更新的,因为sql server无法确定应更新那些被汇总的行

4.如果视图使用自查询来提供派生表,视图输出将不包含该派生表中的任何列。然而可以再用作派生表的子查询中使用聚合函数

5.如果试图包含with check option,则insert和update操作必须满足视图的where子句指定的条件

6.执行insert或update操作时,指定的列必须在基表中是唯一的。如果两个表包含名称相同的列,必须指定列时使用table.column表示法

交叉参考:一种规避视图不可更新限制的方法是创建一个instead of触发器,它检查要更新的数据,并根据这些数据执行合法的update操作

posted @ 2010-09-04 16:26  luck_net  阅读(1807)  评论(0编辑  收藏  举报