Sql server更新另一个表中的多个列

时间:2015-08-24 12:05:01

标签: sql sql-server sql-server-2008

我已经阅读了很多关于如何更新多个列的帖子,但仍无法找到正确的答案。

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

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语句(在括号之间),则脚本返回值但不使用update

5 个答案:

答案 0 :(得分:9)

TSQL不支持row-value constructor。请改用:

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

答案 1 :(得分:6)

您不需要使用子查询,您也可以简单地执行以下操作....

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 .......

答案 2 :(得分:0)

以上解决方案仅适用于MSSQL。 如果是MySql,则只需先声明表

UPDATE 
      table1 t1 ,table2 t2 
set 
      t1.field=t2.field 
where 
      t1.id=t2.id;

在我看来,这是有效的.. !!

答案 3 :(得分:-1)

UPDATE SET命令隐式应用于指定的表,并且无法在SET操作上指定表。

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

答案 4 :(得分:-2)

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