如何一行一行的遍历数据库中的所有行

怎么一行一行的遍历数据库中的所有行?
如果一个数据表行数非常多,所以一次性读取所有数据行出来会导致内存消耗过大,有没有什么语句可以一次读取一行记录的方式遍历所有记录行而保持高效率.

我测试了
select top 1 * from 
( select top 1900019 * from t_person order by id asc) a
order by id desc
 语句,它每次都需要一次性读取所有N行数据出来,然后再返回指定行,档读取到190万行后, 读取时间已经接近0.5秒了.这个语句效率太低,所以请问在不知道主键ID的值时,有什么方法可以保持高效率地从数据库中一行一行的读取数据?

就像StreamReader类的方法ReadLine() 一行,它一次读取一行并提升流位置,所以每次读取一行的效率都是相近的,不会因为行数越多,而读取效率明显下降。所以请问数据库有类似这种读取方式的语句吗?
------解决思路----------------------
第一次取值时使用 :

select top 1 * from t_person order by id asc

后面取值时,将前一个取出的ID传进去:

select top 1  * from t_person where Id > @current_id order by id asc

------解决思路----------------------
引用:
如果一个数据表行数非常多,所以一次性读取所有数据行出来会导致内存消耗过大,有没有什么语句可以一次读取一行记录的方式遍历所有记录行而保持高效率.

我测试了
select top 1 * from 
( select top 1900019 * from t_person order by id asc) a
order by id desc
 语句,它每次都需要一次性读取所有N行数据出来,然后再返回指定行,档读取到190万行后, 读取时间已经接近0.5秒了.这个语句效率太低,所以请问在不知道主键ID的值时,有什么方法可以保持高效率地从数据库中一行一行的读取数据?

就像StreamReader类的方法ReadLine() 一行,它一次读取一行并提升流位置,所以每次读取一行的效率都是相近的,不会因为行数越多,而读取效率明显下降。所以请问数据库有类似这种读取方式的语句吗?



lz这个主要还是要看用的是什么版本的数据库,如果是内存类的数据库,或者是HBase这类数据库。基本都是非常快的。
SQL Server 2012版本以下,一行一行读取瓶颈还是在IO上。从磁盘读出来这块儿。
IO的问题,基本现在都是用曲折的方式来解决的。大内存,或者是使用更好的IO存储。


------解决思路----------------------
2012可以一行一行的读了吗
------解决思路----------------------
用 DataReader 啊
DbDataReader reader = cmd.ExecuteReader(CommandBehavior.CloseConnection);
while (reader.Read())
{
    /// reader.GetString(reader.GetOrdinal("field"));
}