циклический вызов базы данных для обновления или массового обновления по параметру табличного значения - PullRequest
0 голосов
/ 20 апреля 2019

У меня есть некоторая дилемма на 2 варианта:

List<TransactionRecord> trList = new List<TransactionRecord>(){..initialize the list with transactionRecords, let say 200 record}

Вариант А:

foreach(var transaction in trList)
{
   try
   {
      ***per iteration make database call to update
         UpdateToDB(transaction)
      ***e.g simple sql update statement without complex joining or other stuff
    catch
    {
       Console.write("Transaction id:" + transaction.Id + "failed update");
    }  
}
***Will make a lot of db rountrip but every record failure is traceable

Вариант B

Define a table value parameter

@TVP_TransactionRecords TVP_TransactionRecords

Update tblTransactionRecords SET Value = tr.Value INNER JOIN TVP_TransactionRecords tr  ON
tblTransactionRecords.ID = tr.ID

*** В коде

UpdateDbByTableValueParameter(trList);
**This would execute the sql directly without go through several loop

*** Обновите таблицу, передав список транзакций в качестве параметра значения таблицы, и выполните массовое обновление, присоединившись. Я полагаю, что это более целесообразно с точки зрения производительности, так как стоит всего один дБ, но если с обновлением что-то не так, я не могу отследить, какая запись стала причиной сбоя. 200 записей невозможно будет обновить, даже если произошла ошибка только одной записи.

Вы, ребята, думаете, что я должен выбрать вариант А, чтобы получить лучшую работу по техническому обслуживанию для устранения неполадок, или есть какой-то другой способ обойти вариант Б?

Я использую Dapper .net для обработки кода, кстати

...