c# - 与表组结果的 SQL 同步计数

标签 c# mysql sql-server stored-procedures

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

我有一个表 [Tatkal_Merge],其中包含文件名、C_srno、Scan 等字段。 [c_srno 是辅助键]

第二个表 Collat​​ion_Data 包含 srno、文件名、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?

附注

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

最佳答案

您可以采取一些措施来隔离和排除故障:

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

关于c# - 与表组结果的 SQL 同步计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38196216/

相关文章:

c# - 如何在 C# 中的字节数组中查找字节模式?

php - ajax提交按钮: INSERT issue

java - 从 SQL Server 存储过程获取输出参数和 ResultSet 值

具有方法参数值或使用委托(delegate)的 c# 函数

c# - 如何从 Byte 返回位

Mysql在案例内部加入

sql - 使用通用的相关子查询有效地提取不同的列

sql-server - 如何跨多个表强制执行 CHECK 约束

c# - 标签框中的换行符

mysql - AngularJS:使用 mySQL 数据库的双向数据绑定(bind)