2015-08-24 39 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應該做什麼嗎? –