从原始表生成临时表,用UPDATE更新之,有时不成功,这时把没有功更的新临时表删掉,用同样的方法重新生成,却可以,这是为什么?
(逻辑非常简单,会不会是同步问题,要怎么解决)
下面是部分代码,其是ma12,ma26也是临时表中的数据,是前面刚刚更新过的 for (UINT i=start;i<CntTotalGrp;++i) {
SqlCmd.Format("UPDATE %s SET a="
"(SELECT TOP 1 ma12 FROM %s WHERE ID=%u)"
"-(SELECT TOP 1 ma26 FROM %s WHERE ID=%u)"
"WHERE ID=%u",
TmpTblName,TmpTblName,i-2,TmpTblName,i,i);
m_pConn->Execute(_bstr_t(SqlCmd),NULL,adCmdText);
}

解决方案 »

  1.   

    如果不是临时表,数据不准确的话
    只有两个可能,
    1,数据没提交成功.
    2.SQL语句不正确,比如条件是否考虑周全.
      

  2.   

    将SQL语句在查询分析器中执行看看是否报错。
      

  3.   

    看你的操作是对该表ma26、ma12两字段做差值再更新到a如果要保存这种变化 就不必用临时表了 
      

  4.   

    表名不带# 或 ## , 功能上和普通表一样功能上非常简单,一条线下来的,不会有问题,如果是ma12 ma26提交问题的话,怎么保证在用到ma12 ma26时保证他们已经写到数据库里了?
      

  5.   

    如果已经提交语句且执行完毕,你就可以认为他们已经写到数据库里 update对语句加排他锁 要不blocking状态等待获取该锁(这时也可被他读) 要不直接获取该锁后执行更新再释放(再次读取为更新数据)