当用户更新视图中的数据时,其实更改的是其对应的数据表的数据.无论是对视图中的数据进行更改,还是在视图中插入或者删除数据,都是类似的道理.但 是,不是所有SQL Server视图都可以进行更改.如下面的这些视图,在SQL Server数据库中就不能够直接对其内容进行更新,否则,系统会拒绝这种非法的操作.
(1) Group By子句
如在一个SQL Server视图中,若采用Group By子句,对视图中的内容进行了汇总。则用户就不能够对这张视图进行更新。这主要是因为采用Group By子句对查询结果进行汇总在后,视图中就会丢失这条纪录的物理存储位置。如此,系统就无法找到需要更新的纪录。若用户想要在视图中更改数据,则数据库管 理员就不能够在视图中添加这个Group BY分组语句。
(2) Distinct关键字
如不能够使用Distinct关键字。这个关键字的用途就是去除重复的纪录。如没有添加这个关键字的时候,视图查询出来的纪录有250条。添加了这 个关键字后,数据库就会剔除重复的纪录,只显示不重复的50条纪录。此时,若用户要改变其中一个数据,则数据库就不知道其到底需要更改哪条纪录。因为视图 中看起来只有一条纪录,而在基础表中可能对有的纪录有几十条。为此,若在视图中采用了Distinct关键字的话,就无法对视图中的内容进行更改。
(3) AVG、MAX等函数
如果在视图中有AVG、MAX等函数,则也不能够对其进行更新。如在一张视图中,其采用了SUN函数来汇总员工的工资时,此时,就不能够对这张表进行更新。这是数据库为了保障数据一致性所添加的限制条件。