отменить изменения в таблице в базе данных - PullRequest
1 голос
/ 08 января 2009

моя заявка имеет следующую процедуру.

существует база данных товаров (20 000 строк).

наш клиент имеет функцию импорта, куда он импортирует файл Excel.

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

очевидная проблема заключается в том, что если действие 'import' завершается неудачей (ввод-вывод), у них теперь нет данных / частично / curropt в таблице продуктов.

Мы хотим, чтобы в случае сбоя операции «import» исходные данные оставались.

это приложение ASP.NET, написанное на C # с использованием SQL Server 2005 и XSD, которое мы создали с помощью средств проектирования VS2005.

Ответы [ 4 ]

4 голосов
/ 08 января 2009
  1. Начать транзакцию
  2. удалить данные из таблицы
  3. Вставить новые данные
  4. если проблем не возникает, зафиксировать изменения
1 голос
/ 08 января 2009

Я бы пошел с подходом транзакции, как описано выше. Но единственная проблема, которую я вижу, состоит в том, что вы можете заблокировать всю таблицу на весь период процесса импорта. Возможно, вам нужно подумать об этом. Подход с использованием отдельных таблиц может быть одним из решений.

1 голос
/ 08 января 2009

Использование транзакции было бы очевидным выбором здесь.

Полагаю, первое, что я хотел бы спросить, вам действительно нужно очистить всю таблицу? Есть ли временная метка или что-то, что вы могли бы использовать, чтобы ограничить объем данных, которые необходимо обновить? Не могли бы вы переработать логику, чтобы использовать обновления вместо всех удалений и вставок? Таким образом, ваши транзакции будут меньше.

* 1005 Дан *

1 голос
/ 08 января 2009

Я импортировал бы данные в таблицу с той же структурой, что и ваша таблица продуктов, а затем заменил бы данные в таблице продуктов, как только вы будете удовлетворены, импорт успешно завершен.

Это будет означать, что пользователи могут продолжать пользоваться системой во время импорта, а также минимизировать время простоя при обновлении таблицы продуктов.

...