对表变量使用自联接的T-SQL UPDATE

Tim*_*fey 4 t-sql sql-server sql-server-2008 sql-update

想象一下有一张桌子:

declare @tab table (id int, val int)
insert into @tab(id, val)
values (1,10),(2,20),(1,15)
Run Code Online (Sandbox Code Playgroud)

需要更新表并为每个id设置表中具有相同ID的所有值的总和

update @tab
set val = (select sum(val) from @tab tab where tab.id = id)
Run Code Online (Sandbox Code Playgroud)

最后一个查询的where子句始终为true,因此每行将包含表中所有值的总和.

如果表是真的(不是表变量),我会使用表名引用它:

update realtab
set val = (select sum(val) from @tab tab where tab.id = realtab.id)
Run Code Online (Sandbox Code Playgroud)

可以对表变量进行这样的更新吗?

Luk*_*sik 5

尝试使用UPDATE ... FROM

update t
set val = (select sum(val) from @tab tab where tab.id = t.id)
FROM @tab t
Run Code Online (Sandbox Code Playgroud)