SQL同步计数与表组结果



我的SQL Server数据库中有多个表

我有一个表[Tatkal_Merge],其中有像文件名,C_srno,Scan等字段。[c_srno是从键]

第二个表Collation_Data有srno,filename, dispatchcount, totalcount等详细信息。[srno是主键]

totalcount是tatkalmerge表中记录的总数。

两个表中还有许多其他字段,但与这个问题无关。

每当客户在winForm中扫描条形码并且更新成功时,我用扫描值'Y'更新[Tatkal_Merge]并使用存储过程增加Collation_Data调度计数

update [Tatkal_Merge] set [DScan]=@scan,[DScanBy]=@scanBy,[DScanTime]=getdate() where Dscan='N' and [wl_barcode]=@wl
if(@@ROWCOUNT=1)
update Collation_Data set Dqty=Dqty+1 where srno=@C_srno

有时由于某些原因,发货计数不正确1或2个客户。

要求:

1)请说明为什么计数有差异。我猜是第一个和第二个命令之间的网络问题。

2)如果我做错了,正确的方法是什么?

3)如果我这样做是正确的,如何在这种情况下更新表B ?

公立小学

目前,我正在使用相关子查询定期更新collation_Data,

update Collation_Data c
    set Dqty = (select count(*)
            from [Tatkal].[dbo].[Tatkal_Merge] m
            where m.Dscan = 'Y' and m.collation_code = c.collation_code
           );

你可以做一些事情来隔离和排除故障:

  1. 将两个更新包含在事务中
  2. 在第二次更新时捕获@@ROWCOUNT,如果它= 0,则意味着更新没有成功,您可以将所有重要的字段和变量写入可能导致您找到罪魁祸首的日志表中。
  3. 第二次更新失败的主要原因是第一次更新的@@ROWCOUNT为<> 1,或者没有找到该srno的任何行。不可能是网络问题。
if(@@ROWCOUNT=1) 

这可能是一个问题,如果有更多的匹配行的表[Tatkal_Merge]的第一次更新。改为:

if(@@ROWCOUNT > 0)
update Collation_Data set Dqty=Dqty+1 where srno=@C_srno

最新更新