create view vOrderNow as
select * from CustomOrder where  
[DateOut] is null or datediff(d,isnull([DateOut],'2030-1-1'),getdate())<=60以上为视图vOrderNow的内容。
------------------------------------------------------------------
select * from vOrderNow 
返回结果822行。select * from CustomOrder where  
[DateOut] is null or datediff(d,isnull([DateOut],'2030-1-1'),getdate())<=60
返回结果870行。------------------------------------------------------------------第一次遇到这种现象。
SQL Server2000服务器已不间断运行数月。Drop掉该视图,重新Creat后,返回结果就都是870行了。
但不知道下次什么时候又会出现这种状况,还是得找出原因才行。

解决方案 »

  1.   

    你的视图建立好后 是不是对CustomOrder 表结构修改过?
    因为你
    create view vOrderNow as 
    select * from CustomOrder where  
    [DateOut] is null or datediff(d,isnull([DateOut],'2030-1-1'),getdate()) <=60 
    建视图的时候用了select *  
    这样如果改变CustomOrder 表结构 视图会被改变 甚至出现异常的 所以 我们建视图时候 一般不要用 * 要把列 一个个写
      

  2.   

    数据表变了,视图也会变
    反过来说update视图原表的数据也会改变
    你这种情况应该是内存导致的,重启下机器
      

  3.   


    --执行:   
      exec   sp_refreshview   '视图名'/*   
      更新数据库中的所有视图   
      解决由于视图所依赖的基础对象的更改,视图的持久元数据会过期。   
      注意:此更新是针对当前数据库,所以之前要先打开要更新的数据库   
      */   
        
      declare   @ViewName   varchar(250)   
      declare   #views   cursor   for   select   name   from   sysobjects   
      where   objectproperty(id,N'IsView')=1   and   uid=1   order   by   name   
      open   #views   
      fetch   next   from   #views   into   @viewname   
      while   @@fetch_status=0   
      begin   
      print   '更新:   '+@viewname   
      exec   sp_refreshview   @viewname --更新视图   
      fetch   next   from   #views   into   @viewname   
      end   
      close   #views   
      deallocate   #views