Копирование в пакетном режиме
INSERT INTO [TargetDB].[dbo].[Orders]
SELECT TOP 100 *
FROM [SourceDB].[dbo].[Orders] S
WHERE NOT EXISTS
(
SELECT 1 FROM [TargetDB].[dbo].[Orders] T1
WHERE T1.OrderId = S.orderID
)
Это следует делать партиями по 100, которые можно настроить в соответствии с количеством записей, которые необходимо обработать. Этот код предполагает, что у вас есть какая-то форма уникального значения, например, OrderId для отключения в процессе копирования данных
Копирование в диапазонах
Если у вас есть поле, которое вы можете использовать для выбора «диапазонов», таких как OrderDate, начните с выполнения запроса, подобного
SELECT OrderDate, COUNT(1)
FROM [SourceDB].[dbo].[Orders]
чтобы узнать, сколько существует различных значений и сколько записей существует для каждого отдельного значения. Это должно позволить вам выбрать несколько диапазонов (например, 2009-01-01 -> 2009-01-31), а затем использовать ранжированные запросы для копирования данных по:
INSERT INTO [TargetDB].[dbo].[Orders]
SELECT *
FROM [SourceDB].[dbo].[Orders]
WHERE OrderDate BETWEEN '2009-01-01 00:00:00.000' AND '2009-01-31 23:59:59.997'