DB中三张表做了一张视图,程序运行后不知为什么视图中其中一张表的数据为空,把视图删掉重新创建后又是好了,谁知道这坑爹的问题是咋出现的不

解决方案 »

  1.   

    视图使用到的表的字段修改了,视图的字段不会自动变化
    这个可能算是mssql的一个bug吧
      

  2.   

    这个可能是你哪儿有误操作把数据删了吧一楼说的跟这个没任何关系   的确是表改名字了   视图的不会变,但对视图的定义没任何影响视图合表都是SQL Server中的不同类型的对象,只是说视图的数据来源于表,至于字段名字   完全独立
      

  3.   

    如果表的字段名称发生变化了,使用视图时会直接报错误的。不会报错   可以去测试下
    我已经测试过了,直接提示列名无效。
    消息 207,级别 16,状态 1,过程 View_1,第 3 行
    列名 'Col1' 无效。
    消息 4413,级别 16,状态 1,第 1 行
    由于绑定错误,无法使用视图或函数 'dbo.View_1'。
      

  4.   

    如果表的字段名称发生变化了,使用视图时会直接报错误的。不会报错   可以去测试下
    我已经测试过了,直接提示列名无效。
    消息 207,级别 16,状态 1,过程 View_1,第 3 行
    列名 'Col1' 无效。
    消息 4413,级别 16,状态 1,第 1 行
    由于绑定错误,无法使用视图或函数 'dbo.View_1'。2008  sp2不报错
      

  5.   

    如果表的字段名称发生变化了,使用视图时会直接报错误的。不会报错   可以去测试下
    我已经测试过了,直接提示列名无效。
    消息 207,级别 16,状态 1,过程 View_1,第 3 行
    列名 'Col1' 无效。
    消息 4413,级别 16,状态 1,第 1 行
    由于绑定错误,无法使用视图或函数 'dbo.View_1'。2008  sp2不报错
    我使用的2008 r2
      

  6.   


    print @@version
    /*
    Microsoft SQL Server 2008 (RTM) - 10.0.1600.22 (Intel X86) 
    Jul  9 2008 14:43:34 
    Copyright (c) 1988-2008 Microsoft Corporation
    Developer Edition on Windows NT 6.1 <X86> (Build 7600: )*/create table tb
    (
    id int,
    name varchar(50),
    others varchar(255)
    )
    go
    insert tb
    select 1,'aa','nn' union all
    select 2,'bb','nn' union all
    select 3,'cc','nn' union all
    select 4,'dd','nn'
    go
    create view v_test
    as
    select top 2 * from tb
    goexec sp_rename 'tb.others','value','column'
    go
    select * from v_test
    go
    /*
    id name others
    1 aa nn
    2 bb nn
    */
    这个版本也不报错   呵呵但是试图的字段名字还是之前的旧名字
      

  7.   

    视图的定义是写死在系统表里的,如果表结构变了,记得刷新下视图定义:exec sp_refreshview 'view_name'