2015-08-24 43 views
2

我读了很多关于如何更新多个列的帖子,但仍然无法找到正确的答案。Sql服务器从另一个表更新多个列

我有一个表,我想从另一个表更新此表。

Update table1 
set (a,b,c,d,e,f,g,h,i,j,k)=(t2.a,t2.b,t2.c,t2.d,t2.e,t2.f,t2.g,t2.h,t2.i,t2.j,t2.k) 
from 
(
    SELECT ..... with join ... where .... 

) t2 
    where table1.id=table2.id 

如果我只运行SELECT语句(括号内),那么脚本返回值,但不与更新

回答

3

工作TSQL不支持row-value constructor。使用这个来代替:

UPDATE table1 
SET a = t2.a, 
    b = t2.b, 
    (...) 
FROM 
(
SELECT ..... with join ... WHERE .... 
) t2 
WHERE table1.id = table2.id 
0
UPDATE table1 
SET a = t2.a, 
    b = t2.b, 
    (...) 
    k = t2.k 
FROM 
(
    SELECT ..... with join ... WHERE .... 
) t2 
WHERE table1.id = table2.id 
1

你并不需要使用一个子查询,你也可以简单地做以下....

Update t1 
set t1.a = t2.a 
    ,t1.b = t2.b 
    ,t1.c = t2.c 
    ,t1.d = t2.d 
    ....... 
from table1 t1 
JOIN table2 t2 ON t1.id = t2.id 
WHERE ....... 
+0

在最近(2014年我认为)的MS SQL Server版本中,我们尝试了这一点,它在t1时刻不知所措。指定目标字段。一旦我们删除它们,更新按预期工作。我们使用Inner Join而不是仅仅Join,所以也许会有所作为。所以,我们使用“set a = t2.a等”。 –

-1

更新命令集隐含适用于由指定的表,并且不可能在SET操作中指定表。

编辑:只指定要更新的列名称,不要提及表格。

+0

那么你能解释OP应该做什么吗? –