SQL同步计数与表组结果

时间:2016-07-05 06:05:21

标签: c# mysql sql-server stored-procedures

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

我有一个表[Tatkal_Merge],它有像filename,C_srno,Scan等字段。 [c_srno是次要密钥]

第二个表Collat​​ion_Data包含srno,filename,dispatchcount,totalcount等详细信息。[srno是主键]

totalcount是tatkalmerge表中的记录总数。

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

每当客户扫描winForm中的条形码并且更新成功时,我用扫描值' Y'更新[Tatkal_Merge]。并使用存储过程

增加Collat​​ion_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的权利呢?

P.S。

目前,我正在定期使用相关子查询更新collat​​ion_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
           );

2 个答案:

答案 0 :(得分:0)

您可以做很多事情来隔离和排除故障:

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

答案 1 :(得分:0)

if(@@ROWCOUNT=1) 

如果表[Tatkal_Merge]的第一次更新有更多匹配行,则可能会出现问题。而是将其更改为:

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