Восстановите строки из резервной таблицы в другую таблицу. - PullRequest
0 голосов
/ 16 сентября 2011

Я хотел бы сделать простое удаление из EmpTable, а затем вставить в EmpTable Select * xxEmpTablemmddyyy
Но EmpTable ссылается на слишком много таблиц.

Рассмотрим следующий бизнес-поток:

  • Таблицы сотрудников, на которые ссылаются многие таблицы через pk и fk.

  • Любое обновление таблицы сотрудника (скажем, изменение имени сотрудника) обновляет существующую строку эффективное_end_date, а затем создает новую строку с новым действительным_стартовым датой

  • Информация, которая вставляется / обновляется в таблицу сотрудников, поступает из многих исходных файлов (таблиц foxpro, файлов CSV и т. Д.)

  • Указанные исходные файлы затем загружаются в промежуточную таблицу
  • Пройти проверку
  • Хранимая процедура spTransfer: - Сделайте резервную копию существующей таблицы (выберите * в xxEmpTablemmddyyyy из EmpTable) - Обновление / вставка в таблицы сотрудников.

Рассмотрим сценарий.

  • Пользователь загружает исходные файлы в промежуточную таблицу, делает некоторые проверки
  • Выполняет процедуру spTransfer
  • Пользователь понял, что исходные файлы неверны.

Теперь мне нужно вернуть статус EmpTable на основе xxEmpTablemmddyyyy.

Я хотел бы сделать простое удаление из EmpTable, а затем вставить в EmpTable Select * xxEmpTablemmddyyy Но EmpTable ссылается на слишком много таблиц.

Любое предложение высоко ценится.

Спасибо
Элмер

1 Ответ

0 голосов
/ 19 октября 2011

Так требуется ли иметь возможность отменить удаление и вставку?

сохранить удаляемые строки в заархивированную таблицу, поэтому создайте заархивированную таблицу, если у вас есть поле идентификации, которое вам нужно будет вставитьс identity_insert на

select * into MyEMpTable_Archived from MyEMpTable
where 1=2;

выберите строки, которые нужно удалить, и вставьте их в таблицу архива.

Удалите строки из целевой таблицы.

Загрузите новые строкииз таблицы этапов.

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

ЕСЛИ пользователь вызывает после загрузки новых данных, можно будет удалить вновь вставленные строки и вернуть удаленные строки.

Это большая работа.

Убедитесь, что у вас есть хорошие частые резервные копии, вложите средства в виртуальное восстановление SQL или какой-либо другой инструмент, который позволит вам извлечь только одну таблицу, которую вы ищете, в непроизводственную среду, а затем перенести нужные строки обратно втаблица.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...