学习观点的概念。 1)我创建了两个表和一个视图。 2)在视图中修改了一个人的e_id。
预期结果:希望在视图和表格中更改ID。
实际结果:已从视图中删除已修改的行。 但是e_id在其中一个标签中被更改了
我创建了一个名为emp_info的简单表(e_id,ename) 蒂姆128 梅利莎132
表2:mytab包含(desig,salary,doj,ssn,e_id) 执行销售主管81000.9 1/10/2011 1003 128 行政首长99077.9 11/10/2011 1004 132
创建了一个视图vmytab
create view vmytab
as
select b.e_id,a.ename,b.desig from
mytab b,emp_info a
where a.e_id=b.e_id
我尝试更改melissa的员工ID(E-ID)。
update vmytab set e_id=200 where ename='melissa'
我得到了结果(1行受影响)
当我查看我的观点时(select * from vmytab
)
属于梅丽莎的整行都丢失了
那里只有1条属于蒂姆的记录。
但是当我检查mytab表时,melissa的e_id已经改为200。
我再次检查了emp_info。这里有旧记录,即梅利莎132出现。
任何人都可以解释这些不确定因素,或者我在代码中做错了什么?
答案 0 :(得分:0)
当您更新一个表中的id时,视图中的内部联接不会返回任何行。记录已更新(在您为视图中的该列指定的表中),但ID不再匹配。
在这种情况下,您需要使用新ID更新两个表(不要使用视图进行更新)。
答案 1 :(得分:0)
在SQLServer中更新视图时只更新视图中的一个表:
任何修改,包括UPDATE,INSERT和DELETE语句, 必须仅从一个基表引用列。
我个人从未使用view作为更新表的快捷方式,在你的情况下你需要更新两个表,所以唯一的方法就是使用两个查询,但如果你想确保更新发生在同时,对于这两个表,您都可以使用交易,请在此处查看:How to update two tables in one statement in SQL Server 2005?