Обработка всей таблицы пакетами на основе ROW_NUMBER () на самом деле является потенциально плохой идеей. Чтобы вернуть ROW_NUMBER 5001, движок должен сначала сосчитать 5000 строк. Чтобы прочитать строку 10001, нужно снова сосчитать первые 5000, затем следующие 5000. И так далее, и так далее, шаблон очень интенсивно читается. Если таблицы маленькие, это не имеет значения, но если они не ...
Если ваши таблицы имеют хотя бы один уникальный индекс (предпочтительно кластерный), тогда вы можете использовать комбинацию TOP 5000
и WHERE uniquecolumn > @lastbatchmaxvalue
. Если у вас нет такого уникального индекса, вы можете сделать это только с помощью курсора.
Но, возможно, лучшее решение - это выйти из ограничений T-SQL. SSIS идеально подходит для выполнения подобных задач, поддерживает пакеты и работает с эффективным интерфейсом массовой вставки, когда это возможно.