0

学习观点的概念。1)我创建了两个表和一个视图。2)修改了视图中一个人的e_id。

预期结果:希望在视图和表格中更改 id。

实际结果:修改后的行已从视图中删除。但是其中一个标签中的 e_id 已更改

我创建了一个名为 emp_info(e_id,ename) Tim 128 melissa 132 的简单表

表 2: mytab 包含(design,salary,doj,ssn,e_id) 销售主管 81000.9 1/10/2011 1003 128 主管 kindle 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)时,属于 melissa 的整行都丢失了,只有 1 条属于 tim 的记录在那里。

但是当我检查 mytab 表时,melissa 的 e_id 已更改为 200。

我再次检查了emp_info。这里有旧唱片,即 melissa 132。

谁能解释这些不一致或我在代码中做错了什么?

4

2 回答 2

0

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

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

于 2013-10-24T22:37:03.290 回答
0

当您更新 SQLServer 中的视图时,您只更新视图中的一个表:

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

CREATE VIEW (Transact-SQL)

就个人而言,我从未使用视图作为更新表的快捷方式,在您的情况下,您需要更新两个表,因此唯一的方法是使用两个查询,但如果您想确保更新同时发生对于这两个表,您都可以使用事务,请在此处查看:如何在 SQL Server 2005 的一条语句中更新两个表?

于 2013-10-24T22:42:43.330 回答