2012-01-31 44 views
123

有沒有一種方法可以像使用insert語句一樣更新SQL Server中的多個列?更新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 table2 t2 
where table1.id=table2.id 

或者類似的東西,而不是像這樣:

update table set a=t2.a,b=t2.b etc 

它可以是很煩人的,如果你有100多個列寫。

+0

Whish服務器您使用? – sll 2012-01-31 12:39:57

+0

這聽起來很容易出錯 – AD7six 2012-01-31 12:40:31

+0

這只是一個例子而不是完整的代碼。 我正在使用MSSQL – Joe 2012-01-31 13:12:50

回答

66

「煩人的方式」是標準的SQL,以及主流的RDBMS如何實現它。

使用100個列,您最有可能有一個設計問題......也有在客戶端工具緩解方法(如代UPDATE語句)或使用奧姆斯

+3

那麼在MSSQL中沒有其他方法可以做到這一點? – Joe 2012-01-31 13:14:45

+2

@Joe:不。請參閱下面的Alex K答案(http://stackoverflow.com/a/9079904/27535),有一個請求MS添加它 – gbn 2012-01-31 13:22:47

+0

我認爲使用http://www.1keydata.com/sql/sqlupdate.html 「SET column_1 = [value1],column_2 = [value2]」 – DeLe 2013-06-09 01:01:42

144

試試這個:

UPDATE table1 
SET a = t2.a, b = t2.b, ....... 
FROM table2 t2 
WHERE table1.id = t2.id 

這應該適用於大多數SQL方言,不包括Oracle。

是的 - 這是很多打字 - 這是SQL這樣做的方式。

+3

這不適用於Oracle:http://docs.oracle.com/javadb/10.6.2.1/ref/rrefsqlj26498.html – 2014-06-25 10:53:16

+2

@Rafał:問題是關於Microsoft ** SQL Server ** ... – 2014-06-25 11:04:33

+13

嗨! 。你是對的,但我只是想說明它不會在任何SQL方言中工作。 – 2014-06-27 09:02:00

15

你的查詢幾乎是正確的。在T-SQL爲這是:

UPDATE Table1 
SET  Field1 = Table2.Field1, 
     Field2 = Table2.Field2, 
     other columns... 
FROM Table2 
WHERE Table1.ID = Table2.ID 
+0

我懷疑OP只是寬鬆地使用別名,因爲這個問題不是關於語法的正確性,而是「爲什麼」這個語法。就個人而言,我喜歡使用別名,就像我在這裏所做的:http://stackoverflow.com/a/982947/27535 – gbn 2012-01-31 12:54:31

1

這裏是一個工程:

UPDATE `table_1` 
INNER JOIN 
`table_2` SET col1= value, col2= val,col3= val,col4= val; 

值爲TABLE_2

8
UPDATE t1 
    SET 
    t1.a = t2.a, 
    t1.b = t2.b, 
    . 
    . 
    . 


    FROM 
    table1 t1 
    INNER JOIN table2 t2 ON t1.id=t2.id 

列你可以試試這個

+0

這適用於SQLServer,thanx! – IvoTops 2017-08-23 08:49:56

-7
update T1 
set T1.COST2=T1.TOT_COST+2.000, 
T1.COST3=T1.TOT_COST+2.000, 
T1.COST4=T1.TOT_COST+2.000, 
T1.COST5=T1.TOT_COST+2.000, 
T1.COST6=T1.TOT_COST+2.000, 
T1.COST7=T1.TOT_COST+2.000, 
T1.COST8=T1.TOT_COST+2.000, 
T1.COST9=T1.TOT_COST+2.000, 
T1.COST10=T1.TOT_COST+2.000, 
T1.COST11=T1.TOT_COST+2.000, 
T1.COST12=T1.TOT_COST+2.000, 
T1.COST13=T1.TOT_COST+2.000 
from DBRMAST T1 
inner join DBRMAST t2 on t2.CODE=T1.CODE 
+2

請在回答中添加一些評論,以解釋它在做什麼。目前這被標記爲低質量答案,並且除非改進,否則將被刪除。 – Ian 2014-09-10 12:57:39

0

如果您需要重新鍵入這幾次,你可以像我一樣做。 將你的列名稱寫入Excel表格中的行(在每個列名稱(=)的末尾記下,這在記事本++中很容易),在右側創建一個列來複制和粘貼對應於新條目的值在每一列。然後,他們在一個獨立的列權把逗號作爲設計

然後,你將有你的價值觀每次然後複製到中間一欄只貼上,然後和運行

我不知道一個簡單的解決方案

0

我試圖用這種方式和它的做工精細:

UPDATE 
    Sub2 
SET 
    SLNNOND = Sub.SLNNOND, 
    Sub2.SLNNONF = Sub.SLNNONF 
FROM 
    #TEMP Sub2 
6

語法

UPDATE table-name 
SET column-name = value, column-name = value, ... 
WHERE condition 


UPDATE school 
SET course = 'mysqli', teacher = 'Tanzania', student = 'you' 
WHERE id = 6 
-2

我這樣做在MySQL,如果你正在使用它在一個記錄中更新多列,那麼試試這個MySql作爲您的服務器:

"UPDATE creditor_tb SET credit_amount='" & CDbl(cur_amount) & "' 
        , totalamount_to_pay='" & current_total & "', 
     WHERE credit_id='" & lbcreditId.Text & "'". 

但是,我在使用MySql服務器的vb.net中進行編碼,但只要使用MySql作爲您的服務器,您可以將它用於您最喜歡的編程語言。