大概是只仓鼠 2023-06-19 09:23 采纳率: 78.7%
浏览 29
已结题

一个sqlsever的bug,如何解决?

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是变量,分别表示已有数量、需要数量和关键字。具体操作如下:

  1. @keyP设置为'123123'。
  2. @needNum和@haveNum都设置为0。
  3. 对#table中的每一行进行更新,更新的内容包括:
    a. haveNum字段:如果关键字为@keyP,则将haveNum字段设置为@needNum和numQty中较小的值;否则将haveNum字段设置为needNum和numQty之差。
    b. needNum字段:如果关键字为@keyP,则将needNum字段设置为@needNum和@haveNum之差;否则将needNum字段设置为needNum和haveNum之差。
    c. @needNum变量:如果关键字为@keyP,则将@needNum变量设置为@needNum和@haveNum之差;否则将@needNum变量设置为needNum和haveNum之差。
    d. @haveNum变量:如果关键字为@keyP,则将@haveNum变量设置为@needNum和numQty中较小的值;否则将@haveNum变量设置为needNum和numQty之差。
    e. @keyP变量:将@keyP变量设置为当前行的关键字。

这段代码的#table有十几万条数据需要更新,并且有个逐步递增的主key(非keyP),是bigint类型足够大,按照keyP和时间倒叙排序,但是现在出了个问题,部分(还是随机的)数据明明在前面的时候已经把@needNum减到0了,但是到中间,@needNum又再次恢复,再次被运算.

相当于在23年时候的needNum减到0了,21,22年的keyP没被运算,但是19年相同的keyP的needNum又开始相减,算了第二次。这个bug导致相同#table数据,相同运算过程,但是运算多次的结果都不一样。

怎么改才能修复这个bug?

  • 写回答

1条回答 默认 最新

  • 垄断的5心 2023-06-19 10:15
    关注

    我记得如果这个问题解答不了的话,就可以放到GDP里面去找下相关的答案

    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 6月26日
  • 创建了问题 6月19日

悬赏问题

  • ¥30 关于#微信#的问题:微信实名不绑卡 可以实现吗 有没有专家 可以解决
  • ¥15 (标签-考研|关键词-set)
  • ¥15 求修改代码,图书管理系统
  • ¥15 请问有没求偏多标签数据集yeast,reference,recreation,scene,health数据集。
  • ¥15 传感网应用开发单片机实训
  • ¥15 Delphi 关于sAlphaImageList使用问题
  • ¥15 寻找将CAJ格式文档转txt文本的方案
  • ¥15 shein测试开发会问些啥我是写java的
  • ¥15 关于#单片机#的问题:我有个课程项目设计,我想在STM32F103veTX单片机,M3主控模块上设计一个程序,在Keil uVision5(C语言)上代码该怎么编译?(嫌钱少我可以加钱,急急急)
  • ¥15 opnet仿真网络协议遇到问题