2016-07-05 13 views
0

SQL Serverデータベースに複数のテーブルがあります。テーブルグループ結果を含むSQL同期カウント

ファイル名、C_srno、Scanなどのフィールドを持つ1つのテーブル[Tatkal_Merge]があります。

Collat​​ion_Dataはsrno、ファイル名、dispatchcount、トータルカウント等[srnoが主キーである]のような詳細を有する第2のテーブル[c_srnoセカンダリキーである]

トータルカウントがtatkalmergeテーブル内のレコードの総数です。

両方のテーブルには他の多くのフィールドがありますが、この質問には関係ありません。顧客がWinフォームにバーコードをスキャンし、更新がIスキャン値「Y」と[Tatkal_Merge]更新し、ストアドプロシージャを使用してCollat​​ion_Dataディスパッチ・カウントをインクリメント成功するたびに

update [Tatkal_Merge] set [DScan][email protected],[DScanBy][email protected],[DScanTime]=getdate() where Dscan='N' and [wl_barcode][email protected] 

if(@@ROWCOUNT=1) 
update Collation_Data set Dqty=Dqty+1 where [email protected]_srno 

何らかの理由により、ディスパッチ数が1人または2人のお客様によって正しくないことがあります。

要件:

1)数の不一致がある理由を案内してください。私の推測は、第1のコマンドと第2のコマンドの間のネットワークの問題です。

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 
      ); 

答えて

0
あなたは隔離し、トラブルシューティングするために行うことができます

いくつかのこと:

  1. は、トランザクション内
  2. トラップを両方の更新を囲み2回目の更新では@@ ROWCOUNT、それが0の場合は更新が成功しなかったことを意味し、すべての重要なフィールドと変数をログテーブルに書き込んで、あなたを犯人に導く可能性があります。
  3. 2番目の更新が失敗する主な理由は、最初の更新の@@ ROWCOUNTが<> 1であった場合、またはそのsrnoの行が見つからなかった場合です。ネットワーク上の問題ではありません。
+0

[wl_barcode] = @ WLようにすることはできません、それは1行のみと一致することが保証されてどのように... @wlの価値について、それはあるかもしれない主キー –

+0

ですが、何? – objectNotFound

0
if(@@ROWCOUNT=1) 

テーブルの最初の更新をより一致する行が[Tatkal_Merge]がある場合、これは問題であるかもしれません。その代わりに、それを変更します

if(@@ROWCOUNT > 0) 
update Collation_Data set Dqty=Dqty+1 where [email protected]_srno 
+0

[wl_barcode] = @ wlはプライマリキーではありません –

+0

あなたは[wl_barcode]がプライマリキーであると言っていますか? –

+0

はいwl_barcodeは主キーです –

関連する問題