本人刚接触SQL,不知道修改视图中的数据能不能同时改变该视图所对应的表中的数据,在百度上查了一下,有的说能,有的说不能,晕啊。

解决方案 »

  1.   

    SQL2000不行,
    SQL2008可以.
    建议LZ测试一下不就知道了吗.
      

  2.   


    我做了一个实验,说明了有时候,可以删除视图的数据,而有时候是不可以的,和你百度出来的结果是一样的,
    第一个视图的数据,可以删除,是因为视图只有一个表,而的个视图就能删除数据,因为第二个视图是2个表的关联:
    --1.建表
    select * into temp_1
    from sys.objectsselect * into temp_2
    from sys.tables
    --2.创建视图
    create view dbo.v_temp_1
    asselect * from temp_1
    go
    --3.通过视图删除数据
    delete from dbo.v_temp_1
    /*
    (153 行受影响)
    */select * from temp_1
    /*
    (0 行受影响)
    */
    --4.再创建视图
    create view dbo.v_temp_join
    as
    select t2.*
    from temp_1 t1
    inner join temp_2 t2
            on t1.object_id = t2.object_id
    go
    --5.删除视图的数据,报错了
    delete from dbo.v_temp_join
    /*
    消息 4405,级别 16,状态 1,第 1 行
    视图或函数 'dbo.v_temp_join' 不可更新,因为修改会影响多个基表。
    */
      

  3.   

    只是修改,一般没问题。
    如果视图是多张表的join,你不可以修改那些关联字段,也不可以新增、删除,而是要在视图里面创建一个替代的触发器。