原本是应该达到:
强制视图上执行的所有数据修改语句都必须符合由 select_statement 设置的准则。通过视图修改行时,WITH CHECK OPTION 可确保提交修改后,仍可通过视图看到修改的数据
比如
create view stucs as select * from student where sdept='cs' with check option
以后对该视图插入、修改、删除操作时,会自动加上sdept='cs' 的条件
这样的效果的,但是现在却报错说什么重复值,为什么呢??求大神帮助??
把你的详细错误信息给粘一下吧。追问
最上面是我建的带有with check option的视图,是成功了的,下面是要执行插入,插入并没有插入Sdept 的信息,正常来说,是应该帮我自动加上IS的,但是结果报错了,说有重复键??什么意思??
你的主键冲突了.
和你的视图是没有关系的.
应该是你的学号重复了.
你看一下你的学生表,应该已经有这个学号的记录了~~
不好意思,再次打扰,我去打开表发现真的重复了,然后把它删除再执行刚刚的插入语句,但是
消息 550,级别 16,状态 1,第 1 行
试图进行的插入或更新已失败,原因是目标视图或者目标视图所跨越的某一视图指定了 WITH CHECK OPTION,而该操作的一个或多个结果行又不符合 CHECK OPTION 约束。
语句已终止。
这是什么意思呢??是SQL 2005不能用with check option强制插入吗???
这个主要是因为with check option的含义就是限制这个的.
这一句: 通过视图修改行时,WITH CHECK OPTION 可确保提交修改后,仍可通过视图看到修改的数据.
而你添加的数据假如成功的话,你在视图中是没有办法查询到的.(不满足你的Where Sdept=""条件的)
所以,会添加失败的.
不是说with check option 后对该视图插入、修改、删除操作时,会自动加上sdept='Is' 的条件吗??
我去没有加with check option的视图中,试了一下插入,没错视图里面是显示不了新插入的信息的,因为我根本就没有把他定义到IS,但是,不是加了with check option,就会帮我自动加上IS,也就是相当于帮我把他在视图里显示出来吗??我这里很混乱?该怎么弄才会是with check option 自动帮我加上IS ,然后在视图里面显示出来吧
这个是一个CECHK.其实就相当于一个检查约束.
那从约束这个词来讲,它是作限制的.而不是作其他的处理的.
这一句:会自动加上sdept='Is' 的条件
是指对你所操作的数据加上这一个限制条件.注意:是作为限制条件,限制!
可能这一点上你的理解有些偏差了.
再请教一下,我想我明白了with check option是一个检查约束了,增删改查数据的时候RDBMS会检查视图定义中的条件,那为什么书上会说,如图:
【insert into IS_Student
values ('200215129','赵新',20);
可以转换为对基本表的更新:
insert into
Student (Sno,Sname,Sage,Sdept)
values ('200215129','赵新',20,'IS');
这里系统自动将系名IS放入了values子句中。】
这个,只能多动手了,毕竟尽信书不如无书的.