2016-07-05 2 views
0

У меня есть несколько таблиц в моей базе данных SQL Server.Счетчик синхронизации SQL с результатом группы таблицы

У меня есть одна таблица [Tatkal_Merge], которая имеет такие поля, как filename, C_srno, Scan и т. Д. [C_srno является вторичным ключом]

Вторая таблица Collation_Data имеет детали, как srno, имя файла, dispatchcount, TotalCount и т.д. [srno является первичным ключом]

TotalCount представляет собой общее количество записей в таблице tatkalmerge.

Есть много других полей в обеих таблицах, но не относится к этому вопросу.

Всякий раз, когда клиент сканирует штрих-код в Winform, и обновление успешно ли обновить [Tatkal_Merge] со значением сканирования «Y» и увеличивать количество отправки Collation_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) Пожалуйста, руководство почему существует расхождение в счете. Мое предположение - проблема сети между первой и второй командой.

2) Если я ошибаюсь, что это правильный способ сделать это?

3) Если вы делаете это правильно, как обновить таблицу B в таком сценарии?

P.S.

В настоящее время я обновляя 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 
      ); 

ответ

0

Несколько вещей, которые вы можете сделать, чтобы изолировать и устранить:

  1. Приложите оба обновления внутри транзакции
  2. УЛОВИТЕЛЬ @@ ROWCOUNT при втором обновлении, а если это = 0, это означает, что обновление не было успешным, и вы могли записать все важные поля и переменные в таблицу протоколирования, которая может привести вас к виновнику.
  3. Основной причиной отказа второго обновления было бы, если @@ ROWCOUNT с первого обновления было <> 1 или если оно не нашло ни одной строки для этого srno. Маловероятно, что это проблема сети.
+0

Не может быть [wl_barcode] = @ з.д. является первичным ключом –

+0

это могло бы быть, но то, что о значении @wl ... как это гарантированно соответствует только одной строке? – 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 является первичным ключом –

Смежные вопросы