student表:
95001  李勇  男  20  CS 
95002  刘晨  女  21  IS 
95003  王敏  女  18  MA 
95004  张力  男  19  IS 
建立视图IS_STUDENT显示“IS”系所有学生的学号、姓名、性别。
create view IS_STUDENT
as
select Sno,Sname,Ssex
from Student
where Sdept='IS'
with check option;用insert语句向视图中插入元组('95009','王五','男'),查看基本表student表中插入的数据值。问题::当没有加上with check option 的时候,可以成功插入,切插入到基本表的年龄和专业都是null。
        当加上with check ooption 的时候,就插入失败了,这是怎么回事?麻烦详解一下下面是失败的消息:
消息 550,级别 16,状态 1,第 1 行
试图进行的插入或更新已失败,原因是目标视图或者目标视图所跨越的某一视图指定了 WITH CHECK OPTION,而该操作的一个或多个结果行又不符合 CHECK OPTION 约束。
语句已终止

解决方案 »

  1.   

    WITH CHECK OPTION强制视图上执行的所有数据修改语句都必须符合由 select_statement 设置的准则。通过视图修改行时,WITH CHECK OPTION 可确保提交修改后,仍可通过视图看到修改的数据。
      

  2.   

    with check option可以这么解释:通过视图进行的修改,必须也能通过该视图看到修改后的结果。比如你insert,那么加的这条记录在刷新视图后必须可以看到;如果修改,修改完的结果也必须能通过该视图看到;如果删除,当然只能删除视图里有显示的记录。 --->而你只是查询出sdept='is'的纪录,你插入的根本不符合sdept='is'呀,所以就不行默认情况下,由于行通过视图进行添加或更新,当其不再符合定义视图的查询的条件时,它们即从视图范围中消失。例如,可创建一个查询,从而定义一个视图以在表中检索所有员工薪水低于 $30,000 的行。如果该员工的薪水涨到了 $32,000,则查询视图时该特定员工将不再出现,因其薪水不符合视图所设的标准。但是,WITH CHECK OPTION 子句强制所有数据修改语句均根据视图执行,以符合定义视图的 SELECT 语句中所设的条件。如果使用该子句,修改行时需考虑到不让它在修改完后从视图中消失。任何可能导致行消失的修改都会被取消,并显示错误信息。
      

  3.   

    那加上with check option 的时候怎么向视图里面出入数据?
      

  4.   

    主要是这个条件where Sdept='IS' 
      

  5.   


    这个我看过了‘CHECK OPTION 子句强制所有数据修改语句均根据视图执行,以符合定义视图的 SELECT 语句中所设的条件。’这是什么意思,还有就是我的视图里面都是IS的学生 ,插入的时候要怎么办,要说明也是IS的学生吗?
      

  6.   

    对于insert,有with check option,要保证insert后,数据要被视图查询出来只要插入以后的数据能被查询出来就行了插入'95009','王五','男','is'试下
      

  7.   

    通过有with check option选项的视图操作基表(只是面对单表,对连接多表的视图正在寻找答案),有以下结论:
    首先视图只操作它可以查询出来的数据,对于它查询不出的数据,即使基表有,也不可以通过视图来操作。
    1.对于update,有with check option,要保证update后,数据要被视图查询出来
    2.对于delete,有无with check option都一样
    4.对于insert,有with check option,要保证insert后,数据要被视图查询出来
    对于没有where 子句的视图,使用with check option是多余的
      

  8.   

    http://blog.csdn.net/fredrickhu/archive/2009/10/29/4743204.aspx
      

  9.   


    还是不行的,但是我把Student的Sdept的默认值改成了IS后直接这样写就插进去了
    insert 
    into IS_STUDENT1
    values('95009','王五','男') 
    总之还是迷迷糊糊的啊~~~~(>_<)~~~~ 
      

  10.   

    你查询的是IS的,你插入个不是IS的进去?
      

  11.   


    插入后的数据,通过视图能够查询出来就符合WITH CHECK OPTION
    否则就不符合
      

  12.   

    1  建立视图IS_STUDENT显示“IS”系所有学生的学号、姓名、性别。视图的定义加入WITH CHECK OPTION子句
    用insert语句向视图中插入元组('95009','王五','男'),查看基本表student表中插入的数据值。
    这个是原来的问题
      

  13.   

    如果student那个Sdept没有默认值IS是不可能插进去的