修改包含两个表sql server 2012的视图

时间:2013-10-24 22:24:38

标签: sql sql-server

学习观点的概念。 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出现。

任何人都可以解释这些不确定因素,或者我在代码中做错了什么?

2 个答案:

答案 0 :(得分:0)

当您更新一个表中的id时,视图中的内部联接不会返回任何行。记录已更新(在您为视图中的该列指定的表中),但ID不再匹配。

在这种情况下,您需要使用新ID更新两个表(不要使用视图进行更新)。

答案 1 :(得分:0)

在SQLServer中更新视图时只更新视图中的一个表:

  

任何修改,包括UPDATE,INSERT和DELETE语句,   必须仅从一个基表引用列。

来自CREATE VIEW (Transact-SQL)

我个人从未使用view作为更新表的快捷方式,在你的情况下你需要更新两个表,所以唯一的方法就是使用两个查询,但如果你想确保更新发生在同时,对于这两个表,您都可以使用交易,请在此处查看:How to update two tables in one statement in SQL Server 2005?