刚开始创建视图时,按照规范,老老实实select 字段名1,字段名2
    但问题来了,这个程序偶尔要维护一下(几个月吧),添个字段或删除个字段,然后稍微改下程序    结果使用视图的地方,程序一运行行就报错。如果是开发阶段,不是什么问题,但维护阶段,一年半载的才去改一次,谁记得还要修改视图里的字段     于是想把视图改成 select * from ....     关键是在SQL 2008中,一写*号,自动帮你改成所有的字段名(好心办坏事了)     我的程序不大,表数据不算多,写成*对效率影响微乎其微。另外,无法预估将来会增加哪些字段,都是对方老总头脑一热,说再加个什么什么的吧,加的这些东西很简单,但我们无法预测。
  
     问题:
     1、有没有可能创建视图时,除了我写的字段,新增的字段也会自动放进去
     2、如果第一点做不到,退而求其次,有没有可能写成select *的模式

解决方案 »

  1.   

    在SQL Server 2008中,*号全都自动跳成字段名的么
    晕,这样看来,这种方法是行不通了。唯一的办法就是记录每个视图所涉及的功能,每次修改时,都要查看一下
      

  2.   

    如果数据不是太复杂,建议不要用视图.
    因为你使用select * 后一加字段,视图的字段不会自动添加的,你需要更新视图一次,新的字段才会加进去,这是升级系统人员或数据库维护人员必须注意的一点.
      

  3.   

    楼主改视图的时候不要用可视化编辑工具,这样:
    右击视图名称,【编写视图脚本为】【ALTER到】【新查询编辑器窗口】
      

  4.   

    你可以通过存储过程,来刷新一下视图:sp_refreshview '视图名称'
      

  5.   

    这是一个实验,能帮助楼主理解:
    if object_id('tb') is not null
       drop table tb
    gocreate table tb(id int, v varchar(10))insert into tb values(1,'a')
    go
    --创建视图
    create view dbo.view_tb
    asselect * from tb
    go
    --1.查一下数据
    select * from view_tb
    /*
    id v
    1 a
    */--2.给表增加一个字段
    alter table tb
    add vvv varchar(10);
    go
    --3.再次查询数据,发现新加的字段,竟然没有显示出来
    select * from view_tb
    /*
    id v
    1 a
    */
    --4.刷新视图
    sp_refreshview 'view_tb'
    go--5.再次查询数据,发现新增的一列,能显示出来了
    select * from view_tb
    /*
    id v vvv
    1 a NULL
    */
      

  6.   

    不过,这个还是得对方告诉你之后,你才能知道需要刷新视图的,而且其他凡是引用到新加的字段的sql语句,估计也需要修改。否则,在执行时有可能会报错。
      

  7.   

    我觉得还是刷新的问题,看看我的博客:
    http://blog.csdn.net/dba_huangzj/article/details/8426684
      

  8.   


    按理说,数据库系统能知道所有对象的依赖关系,被引用的表的字段变化了,系统应该自动通知所有引用过此表的视图,自动更新自己。不知道为什么mssql一直没做到如此