我对AS400上的DB2有些新意,今天我设法将单个字段的值设置为300k +记录中的错误数量,现在我需要修复它...
我遇到UPDATE语句问题:
UPDATE WHSPSLP
SET WHSPSLP.WHS_TOT_VALUE = BUWHSPSLP.WHS_TOT_VALUE
WHERE WHSPSLP.WHS_PSLP_NO = BUWHSPSLP.WHS_PSLP_NO
我正在从表的备份中使用正确的值更新字段,但我无法正确使用。
谢谢
答案 0 :(得分:1)
如果BUWHSPSLP.WHS_TOT_VALUE是一个常量值,对于所有记录,您可以使用一个这样的更新语句:
DECLARE v_WHSTotalValue INT;
SET v_WHSTotalValue = (
SELECT WHS_TOT_VALUE
FROM BUWHSPSLP
FETCH FIRST 1 ROWS ONLY
);
UPDATE WHSPSLP
SET WHS_TOT_VALUE = v_WHSTotalValue
WHERE WHS_PSLP_NO IN (
SELECT WHS_PSLP_NO
FROM BUWHSPSLP
);
否则,您需要使用游标遍历所有记录并按如下方式更新每个记录:
BUWHSPSLPLoop:
FOR v AS cur1 CURSOR WITH HOLD FOR
SELECT WHS_TOT_VALUE, WHS_PSLP_NO
FROM BUWHSPSLP
DO
UPDATE WHSPSLPSET
SET WHS_TOT_VALUE = v.WHS_TOT_VALUE
WHERE WHS_PSLP_NO = v.WHS_PSLP_NO;
END FOR BUWHSPSLPLoop;