有个表 1万多条数据  字段为 a ,b ,c 都是decimal类型  数据库为sql server 2005现在程序循环每行。 update c=a*b第一次计算完后,所有行的数据都正确,唯独只有其中某2行的c不正确。得出来一个不知道怎么算出来的数。第二次重新计算。一切正常。 这2行的a,b都正确。 单线程操作该表,每次操作均使用了事务。有时会有3,5行不对,有时是1,2行。有时又没有。重算后,又一切正常。请问这是怎么回事,谢谢。

解决方案 »

  1.   

    确定没有并发操作?
    将c 改为计算列试试
    c as a*b
      

  2.   

    BEGIN TRAN
    update c WITH(XLOCK)=a*b 
    COMMIT TRAN 
    应该是有其他人更新过了
      

  3.   

    BEGIN TRAN
    update c WITH(XLOCK,HOLDLOCK)=a*b 
    COMMIT TRAN 最好一直保持到事务完成
      

  4.   

    为什么要循环每行,那不等于一次update吗
      

  5.   

    BEGIN TRAN
    update c WITH(XLOCK,HOLDLOCK)=a*b 
    COMMIT TRAN 
    每一次循环操作都是这样做的。很确定是单线程操作。因为本程序和数据库均在一台没有上网的pc服务器上完成的。而且程序里也是单线程循环
      

  6.   

    不用循环,用update语句+条件也能做。但是出现的这个问题让人觉得挺奇怪的。客户提出这个问题,我现在没有办法给客户一个解释。就是不知道为什么会产生这个问题。
      

  7.   

    嗯alter table tb alter column c as a*b