首页 > 开发 > 综合 > 正文

将列更新从一个表传递到另一个表

2024-07-21 02:10:42
字体:
来源:转载
供稿:网友

问:怎样在一个update语句中使用表b的三个列更新表a中的三个列?

答:对这个问题,您可以使用强大的关系代数。本页中的代码说明了如何组合使用from子句和join操作,以达到用其他表中数据更新指定列的目的。在设计关系表达式时,您需要决定是否需要单一行匹配多个行(一对多关系),或者需要多个行匹配被联接表中的单一行以更新所有行(多对一关系)。

在一对多关系中,sql server始终使用它找到的最后一行更新数据。但是,您无法控制最后一行所在的位置。在多处理器的计算机上,查询可能是同步进行的,相同的查询最后一行的位置可能会不同。因此,microsoft建议尽量不要使用一对多关系。

如果待更新的表与from子句中的表相同,并且from子句只包含对该表的一个引用,别名可能未被指定。如果待更新的表在from子句中出现了多次,只有该表的一个引用可以省略表的别名,对该表的所有其他引用必须包含一个表别名。

use tempdb
go
create table #t1 (c1 int not null, c2 char(5), c3 char(5),
 c4 char(5))
go
create table #t2 (c1 int not null, c2 char(5), c3 char(5),
 c4 char(5))
go


--数据赋值
insert #t1 values (1,'hello','there','fred')
insert #t2 values (1,'how','are','you?')


--更新数据
update #t1 set #t1.c2 = #t2.c2, #t1.c3 = #t2.c3,
 #t1.c4 = #t2.c4
from #t2
where #t1.c1 = #t2.c1


--检查结果
select * from #t1

—microsoft sql server开发团队


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表