转载:sql server中如何修改视图中的数据? - 小小邪 - 博客园 (cnblogs.com)
sql server中如何修改视图中的数据?
我做个测试,视图的数据有标记字段时,如果是这种方式(0 as FlagState),是无法修改的
--创建视图语句 ---
create view V_EdsProd_1
as
select a.Uid ProdId, a.Code ProdCode,a.Name ProdName,b.Name ProdUnit,0 as FlagState
from EdsProd a
left join EdsProdUnit b on a.ProdUnit = b.Uid
where a.DownloadFlag=0 and a.State=9
go
查询视图的数据
--查询视图的数据--- select * from V_EdsProd_1

假如,我们要修改视图的数据(33921,33922)的状态为1
--修改视图数据的语法-- update V_EdsProd_1 set FlagState=1 where ProdId in(33921,33922);
报错如下:

那么,我们将上面创建的视图,重新定义一下(0 as FlagState)把这个0改成数据表中存在的字段
--删除视图的语法--
drop view V_EdsProd_1;
--创建视图语句 ---
create view V_EdsProd_1
as
select a.Uid ProdId, a.Code ProdCode,a.Name ProdName,a.DownloadFlag as FlagState
from EdsProd a
left join EdsProdUnit b on a.ProdUnit = b.Uid
where a.DownloadFlag=0 and a.State=9
go
再次执行修改语句,结果如下:

总结:
数据库的视图的数据如果想要修改,必须保证标记字段是持久化存在的(得有这个字段),才能修改;反之,
如果只是用“0或' ' AS FlagState” 这种,只是一个引用,下次调用视图还是会被初始化,无法修改
平时多记记,到用时才能看看,记录你的进步,分享你的成果
在SQLServer中,若要修改视图中的数据,视图的标记字段必须是数据表中存在的持久化字段,而不能仅仅是常量表达式如0ASFlagState。如果尝试修改这样的视图,数据不会被保存。重新定义视图,使用实际存在的字段后,才能成功更新视图数据。

1945

被折叠的 条评论
为什么被折叠?



