У меня есть база данных SQLite, для которой я хочу заполнить новое поле на основе существующего. Я хочу получить новое значение поля с помощью функции C #.
В псевдокоде это будет примерно так:
foreach ( record in the SQLite database)
{
my_new_field[record_num] = my_C#_function(existing_field_value[record_num]);
}
Рассмотрев другие предложения по StackOverflow, я использую SqliteDataReader для чтения каждой записи, а затем запускаю команду SQlite «UPDATE» на основе конкретного RowId для обновления нового значения поля для той же записи.
Он работает ... но он ДЕЙСТВИТЕЛЬНО медленный и как сумасшедший забивает жесткий диск. Неужели нет лучшего способа сделать это?
Некоторые из баз данных, которые мне нужно обновить, могут содержать миллионы записей.
Заранее благодарю за любую помощь.
Редактировать:
В ответ на комментарий вот реальный код на устаревшем языке под названием Concordance CPL. Важно отметить, что вы можете читать и записывать изменения в текущую запись за один раз:
int db;
cycle(db)
{
db->FIRSTFIELD = myfunction(db->SECONDFIELD);
}
myfunction(text input)
{
text output;
/// code in here to derive output from input
return output;
}
У меня такое чувство, что в SQLite нет эквивалентного способа сделать это, поскольку SQL по своей сути является транзакционным, тогда как Concordance позволяет вам просматривать и обновлять базу данных последовательно.