若要创建视图,数据库所有者必须授予您创建视图的权限,并且您对视图定义中所引用的表或视图要有适当的权限。默认情况下,由于行通过视图进行添加或更新,当其不再符合定义视图的查询的条件时,它们即从视图范围中消失。例如,可创建一个查询,从而定义一个视图以在表中检索所有员工薪水低于 $30,000 的行。如果该员工的薪水涨到了 $32,000,则查询视图时该特定员工将不再出现,因其薪水不符合视图所设的标准。但是,WITH CHECK OPTION 子句强制所有数据修改语句均根据视图执行,以符合定义视图的 SELECT 语句中所设的条件。如果使用该子句,修改行时需考虑到不让它在修改完后从视图中消失。任何可能导致行消失的修改都会被取消,并显示错误信息。

解决方案 »

  1.   

    create table table1
    (bm float
    )go insert into table1 values(5000)
    gocreate view TestViewCheckOption 
    AS
    select * from Table1 where Bm < 5003
    with check option
    goupdate TestViewCheckOption set Bm = 5005 
    go---执行结果
    服务器: 消息 550,级别 16,状态 1,行 1
    试图进行的插入或更新已失败,原因是目标视图或者目标视图所跨越的某一视图指定了 WITH CHECK OPTION,而该操作的一个或多个结果行又不符合 CHECK OPTION 约束的条件。
    语句已终止。
      

  2.   

    我创建了一个这样的视图:
    create view xx_view
    as
    select sno,sname,sage
    from s
    where sdept='信息'
    with check option而进行插入操作时为什么不行呢?插入语句如下:
    insert
    into xx_view
    values ('95111','aa',20)