2010-08-18 85 views
2

我有這樣的一個表: -更新多行SQL

 
Product ID   Weight 
A      100 
B      100 
C      100 
D      100 
E      100 

我想將它更改爲: -

 
Product ID   Weight 
A      501 
B      601 
C      701 
D      801 
E      401 

我怎樣才能做到這一點與SQL update命令??

回答

8

使用案例表達這樣

UPDATE products SET 
Weight = 
CASE ProductID 
    WHEN 'A' THEN 501 
    WHEN 'B' THEN 601 
    WHEN 'C' THEN 701 
    WHEN 'D' THEN 801 
    WHEN 'E' THEN 401 
END 
WHERE ProductID in ('A', 'B', 'C', 'D', 'E') 

沒有WHERE子句,表中的每一行會進行測試(不必要的,因爲他們永遠不會匹配)。

更多信息:CASE (Transact-SQL)Case OracleCase MySQL

+0

嗨, 我試圖做一些額外的: - 更新產品集 重量= (CASE的ProductID 當 'a' THEN 501 當'B'然後601 當'C'然後701 當'D'然後801 當'E'然後401 結束) 其中Store ='HHH'和Company ='ABC' 系統提示時顯示以下錯誤消息: - 錯誤:SQL0199 - 關鍵字WHERE不是預期的。有效令牌:SET。 (州:37000,本機代碼:FFFFFF39) – Bob 2010-08-18 09:36:07

+0

使用什麼RDBMS? (SQL SERVER,MySQL,Oracle,PostgreSQL) – gyromonotron 2010-08-18 09:44:21

+0

SQL SERVER ...... – Bob 2010-08-18 09:56:50

0
UPDATE [TABLE] SET Weight = 501 WHERE [Product ID] = 'A' 
GO 
UPDATE [TABLE] SET Weight = 601 WHERE [Product ID] = 'B' 
GO 
UPDATE [TABLE] SET Weight = 701 WHERE [Product ID] = 'C' 
GO 
UPDATE [TABLE] SET Weight = 801 WHERE [Product ID] = 'D' 
GO 
UPDATE [TABLE] SET Weight = 401 WHERE [Product ID] = 'E' 
GO 
+0

這是爲單行但我有多行。怎麼做 ? – Bob 2010-08-18 09:40:07

+0

加入更多人 – 2010-08-18 09:48:46

+0

更新[TABLE] SET Weight = 501 WHERE [Product ID] ='A' UPDATE [TABLE] SET Weight = 601 WHERE [Product ID] ='B' UPDATE [TABLE] SET Weight = 701 [產品ID] ='C' UPDATE [TABLE] SET Weight = 801 WHERE [Product ID] ='D' UPDATE [TABLE] SET Weight = 401 WHERE [Product ID] ='E' I hv run一次一個。我不能一起執行它們?有沒有辦法同時運行它們。 – Bob 2010-08-18 09:56:01