日期:2014-05-17  浏览次数:20488 次

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

------解决方案--------------------
SQL2000不行,
SQL2008可以.
建议LZ测试一下不就知道了吗.
------解决方案--------------------
没有2005的环境,但是2008试过是可以的
------解决方案--------------------
2005以后的好像都 可以查看,修改,删除,
视图对应的 操作和操作表的语句是一样的,只不过对象由表改为视图而已。
------解决方案--------------------
引用:
本人刚接触SQL,不知道修改视图中的数据能不能同时改变该视图所对应的表中的数据,在百度上查了一下,有的说能,有的说不能,晕啊。


我做了一个实验,说明了有时候,可以删除视图的数据,而有时候是不可以的,和你百度出来的结果是一样的,
第一个视图的数据,可以删除,是因为视图只有一个表,而的个视图就能删除数据,因为第二个视图是2个表的关联:


--1.建表
select * into temp_1
from sys.objects

select * into temp_2
from sys.tables


--2.创建视图
create view dbo.v_temp_1
as

select * 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' 不可更新,因为修改会影响多个基表。
*/