Я перемещаю записи из одной базы данных в другую, как часть процесса архивирования. Я хочу скопировать строки в таблицу назначения, а затем удалить те же строки из исходной таблицы.
Мой вопрос заключается в том, каков наиболее эффективный способ проверки успешности первой вставки перед удалением строк.
Моя идея такова, но я чувствую, что есть лучший способ:
@num_records=select count(ID) from Source_Table where (criteria for eligible rows)
insert * into Destination_Table where (criteria for eligible rows)
if ((select count(ID) from Destination_Table where (criteria) )=@numrecords)
delete * from Source_Table where (criteria)
Лучше / можно ли сочетать это с функцией RAISERROR? Спасибо!
источник
OUTPUT
предложением? Это не потому, что все это одно утверждение. Также избегает проблемы необходимости читать строки дважды (и, возможно, терять строки, которые были добавлены между чтением для вставки и чтением для удаления)Способ, которым я думал о выполнении архивирования (который, я уверен, тоже не идеален), заключается в добавлении небольшого столбца в новую архивную таблицу, например «Archived», который будет иметь значение 1 после успешной передачи записи. И после того, как вы перенесете все записи, вы можете выполнить операцию удаления, одновременно ища для этого значения в поле «Архив» значение «1», т. Е. «Истина» из архивной таблицы.
И я согласен с Майком в использовании Try / Catch.
источник
Попробуй это:
источник