我的 SQL Server 数据库中有多个表。
我有一个表 [Tatkal_Merge],其中包含文件名、C_srno、Scan 等字段。 [c_srno 是辅助键]
第二个表 Collation_Data 包含 srno、文件名、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
);
最佳答案
您可以采取一些措施来隔离和排除故障:
- 将两个更新包含在事务内
- 在第二次更新时捕获@@ROWCOUNT,如果它= 0,则意味着更新未成功,您可以将所有重要字段和变量写入日志表中,这可能会导致您找到罪魁祸首。
- 第二次更新失败的主要原因是第一次更新的 @@ROWCOUNT 为 <> 1 或者没有找到该 srno 的任何行。这不太可能是网络问题。
关于c# - 与表组结果的 SQL 同步计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38196216/