视图怎么会自动更新的呢?它里面只是个查询而已啊,只是一个DDL语句而已。如果你的语句有问题,那视图肯定有问题,不过看来是你数据出现问题了。建议控制好数据的录入。另外,强烈建议不要用*号,一旦表结构改变,痛苦的事情就会来了。最后,这跟2005没关系,任何数据库都会出现这类的问题。

解决方案 »

  1.   


    是吗,我的视图语句是这样的。select A.*,B.* from A INNER JOIN B on A.a_id = B.b_id.请问,在sqlserver2005如果视图只是查询语句,那么结果这么会少了个字段。还莫名其妙的类型转换错误
      

  2.   


    问题是为什么要刷新呢,视图不是个查询语句吗。难道sqlserver2005的视图做过特殊处理,比如对结构做过缓存??
      

  3.   

    当你用*号的时候,隐患早就存在了。就像我刚才说的,当表结构变化的时候,我举个例子吧。
    假设表A(ID,NAME)
    有一个视图:create view test as select * from A  视图很少写,不知道有没有语法错误,就看个大概吧。
    然后你用的时候insert into B(id,name) select * from test,这样是没问题的。
    但是当你A表改变了。变成A(ID,NAME,VALUE)时,你的select * from test本来就出来3列了。插入到2列的表时就会报错,我相信Oracle、DB2、SQLServer2000、2008这些都不可能避免的。所以我才建议你不要用*号。这个东西刷新是没用的。
      

  4.   

    视图实际上就是一个查询的定义,你执行过之后他是不会自动根据定义修改的,你里面用*,外面也用*或者后面的某些字段会篡位的。视图有变化最好drop 再 create 要不然就不要用*
      

  5.   


    正解!建议如果你视图有变化先drop再重新创建
      

  6.   


         在我的印象中,视图就一查询语句。这个问题打破了我以前的认识,所以我特地安装了一个oracle试了下,发现oracle确实没有这个问题,在oracle中视图就一sql语句,也就无所谓自不自动更新。     后来,发现oracle中有一种物化视图的概念,可能会发生这个问题