DECLARE @haveNum NUMERIC(14,4),@needNum NUMERIC(14,4),@keyP VARCHAR(16)
SELECT @keyP = '123123'
SELECT @needNum = 0
SELECT @haveNum = 0
UPDATE #table SET
haveNum
= CASE WHEN keyP = @keyP
THEN CASE WHEN numQty > @needNum THEN @needNum ELSE numQty END
ELSE CASE WHEN numQty > needNum THEN needNum ELSE numQty END
END,
needNum
= CASE WHEN keyP = @keyP
then case when @needNum>=@haveNum then @needNum-@haveNum else 0 end
else needNum-haveNum
END,
@needNum
= CASE WHEN keyP = @keyP
then case when @needNum>=@haveNum then @needNum-@haveNum else 0 end
else needNum-haveNum
END,
@haveNum
= case when keyP = @keyP
then case when numQty > @needNum then @needNum else numQty end
ELSE CASE WHEN numQty > needNum THEN needNum ELSE numQty END
end,
@keyP = keyP
用AI解释一下这段代码:这是一个SQL语句,作用是更新一个名为#table的临时表中的数据。其中,@haveNum、@needNum和@keyP是变量,分别表示已有数量、需要数量和关键字。具体操作如下:
这段代码的#table有十几万条数据需要更新,并且有个逐步递增的主key(非keyP),是bigint类型足够大,按照keyP和时间倒叙排序,但是现在出了个问题,部分(还是随机的)数据明明在前面的时候已经把@needNum减到0了,但是到中间,@needNum又再次恢复,再次被运算.
相当于在23年时候的needNum减到0了,21,22年的keyP没被运算,但是19年相同的keyP的needNum又开始相减,算了第二次。这个bug导致相同#table数据,相同运算过程,但是运算多次的结果都不一样。
怎么改才能修复这个bug?
我记得如果这个问题解答不了的话,就可以放到GDP里面去找下相关的答案