在SQL中使用不同的值更新多行

在SQL中使用不同的值更新多行,sql,Sql,我有一张这样的桌子:- Product ID Weight A 100 B 100 C 100 D 100 E 100 产品ID重量 100英镑 B 100 C100 D 100 E100 我想将其更改为:- Product ID Weight A

我有一张这样的桌子:-

Product ID Weight A 100 B 100 C 100 D 100 E 100 产品ID重量 100英镑 B 100 C100 D 100 E100 我想将其更改为:-

Product ID Weight A 501 B 601 C 701 D 801 E 401 产品ID重量 A 501 B 601 C 701 D 801 E 401
如何使用SQL更新命令来实现这一点???

像这样的用例表达式

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子句,表中的每一行都将被测试(不必要,因为它们永远不会匹配)


更多信息:,

Hi,我试着用一些额外的方法来做到这一点:-更新产品集权重=(案例ProductID当'A'时,501当'B'时,601当'C'时,701当'D'时,801当'E'时,401结束)其中Store='HHH'和Company='ABC'系统将提示以下错误消息:-错误:SQL0199-关键字where not expected。有效令牌:SET。(州:37000,本机代码:FFFFFF 39)使用了什么RDBMS?(SQL SERVER、MySQL、Oracle、PostgreSQL)根据错误SQL0199看起来您正在使用db2i删除括号后,它会提示另一个错误代码:-错误SQL0407-列或变量权重中不允许使用空值OK,表products包含一些额外的ProductID(不仅仅是A、B、C、D、E)。因此,您应该为这种情况添加ELSE语句。(例如,案例ProductID当'A'时为501当'B'时为601当'C'时为701当'D'时为801当'E'时为401 ELSE 100 END)这适用于单行,但我有多行。怎么做?更新[表格]设置权重=501其中[产品ID]=“A”更新[表格]设置权重=601其中[产品ID]=“B”更新[表格]设置权重=701其中[产品ID]=“C”更新[表格]设置权重=801其中[产品ID]=“D”更新[表格]设置权重=401其中[产品ID]=“E”我一次运行一个。我不能一起执行?是否有办法同时运行它们。它们永远不会同时运行,更新一次只执行一行。为什么这么重要?我需要更新上千行。必须有办法缩短这一过程。我不能一整天都坐在这里一排一排地跑。千排应该不会超过几秒钟或几分钟。一定是出了什么事。一次更新需要多少时间?执行计划是什么样子的?
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