从SQL Server批量获取记录的最佳方法是什么

场景 :我们从SQL Server获取行到C#.Net控制台应用程序,并通过存储过程对从SQL Server检索到的数据执行操作; 执行操作后,使用C#-MongoDB-Driver将新数据存储到MongoDB中。

问题 :有数十亿行。 我的存储过程包含如下查询:

select * from table_name 

为了计算出一些批处理逻辑,没有标识列,也没有任何日期列等。

信息 :截至目前,应用程序正在获取最多3500 – 5000条记录并存储到MongoDB中,然后抛出错误,如下所示:

System.Runtime.InteropServices.SEHException(0x80004005):外部组件抛出exception。

问题 :任何人都可以建议我从SQL Server批量读取/获取一些逻辑吗?

如果您不能在SQL Server 2012中使用OFFSET-FETCH并假设该表具有允许您唯一标识行的主键或列,请将其称为UniqueKey ,然后在2005年向上,您可以使用ROW_NUMBER这样…

 SELECT UniqueKey, col2, col3 FROM ( SELECT UniqueKey, col2, col3, ROW_NUMBER() OVER (ORDER BY UniqueKey) AS RowNum FROM YourTable ) sub WHERE sub.RowNum BETWEEN @startRow AND @endRow 

如果你真的没有唯一的密钥或添加一个的可能性,那么你可以使用…

 ROW_NUMBER() OVER (ORDER BY (SELECT 0)) 

…尝试保留记录存储的自然顺序。但是,根据您的数据结构,这并不能保证完全按照您的意愿工作。 所以,测试迁移会更加重要,但我相信无论如何你都会这样做;-)

如果使用MSSQL 2012,请尝试OFFSET-FETCH子句。 这是最好的解决方案!

EXAMLE:SELECT … ORDER BY orderid OFFSET 25 ROWS FETCH NEXT 25 ROWS ONLY

  It means this query will return from 25 to 50 records. ORDER BY clause is mandatory, so if dont want to use order, just write like: ....ORDER BY (SELECT NULL).....