Существует ли увеличивающийся ключ, такой как идентификационный ключ? И это кластерный индекс? Если это так, должно быть достаточно просто отследить последний ключ, который вы получили, и сделать что-то вроде:
SELECT TOP 1000000 *
FROM [MyTable]
WHERE [Id] > @LastId
ORDER BY [Id]
Также - обязательно прочитайте что-нибудь вроде ExecuteReader
, чтобы не буферизовать слишком много строк.
Конечно, за пределами нескольких тысяч строк вы также можете просто принять случайное обратное путешествие и сделать несколько запросов, скажем, по 10000 строк за раз. Я не думаю, что это было бы менее эффективно в реальном выражении (несколько миллисекунд тут и там).