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

C# 从SQL Server批量获取记录的最佳方法是什么,c#,sql-server,sql-server-2008,c#-4.0,sql-server-2008-r2,C#,Sql Server,Sql Server 2008,C# 4.0,Sql Server 2008 R2,场景:我们正在从SQL Server获取行到C.Net控制台应用程序,并通过存储过程对从SQL Server检索到的数据执行操作;执行操作后,使用C-MongoDB-Driver将新数据存储到MongoDB中 问题:有几十亿行。我的存储过程包含以下查询: select * from table_name 要计算某些批处理逻辑,没有标识列,也没有日期列等 信息:到目前为止,应用程序正在获取多达3500-5000条记录并存储到MongoDB中,然后抛出一个错误,如下所示: select * fro

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

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

select * from table_name
要计算某些批处理逻辑,没有标识列,也没有日期列等

信息:到目前为止,应用程序正在获取多达3500-5000条记录并存储到MongoDB中,然后抛出一个错误,如下所示:

select * from table_name
System.Runtime.InteropServices.SEHExException 0x80004005:外部组件引发异常


问题:有人能给我推荐一些从SQL Server进行批处理读取/获取的逻辑吗?

如果您使用MSSQL 2012 try OFFSET-fetch子句。这是最好的解决方案

示例:SELECT…ORDER BY orderid OFFSET 25 ROWS仅获取接下来的25行

这意味着该查询将返回25到50条记录。ORDER BY子句是必需的,因此如果您不想使用ORDER,请使用ORDER BY SELECT NULL

如果您不能在SQL Server 2012中使用OFFSET-FETCH,并且假设该表具有允许您唯一标识行的主键或列,让我们将其称为UniqueKey,那么在2005年以上,您可以这样使用

选择UniqueKey、col2、col3 从…起 选择UniqueKey、col2、col3,按UniqueKey排序的行数作为RowNum 从你的桌子上 附属的 其中sub.RowNum在@startRow和@endRow之间
问题标签表明他们使用的是SQL Server 2008是您提出的最佳解决方案,前提是我们使用的是MS SQL 2012。但我们在MS SQL 2008上&在2008 R2上。。感谢您的时间。您可以通过选择0…使用…ROW_NUMBER OVER ORDER…来尝试保留记录存储的自然顺序。-嗯,那是错的。在一个名为4GuysFromRolla的网站上,有一个关于SQL Server 2000中高效分页的信息。我认为它可能在2008年仍然有效。“值得一试。”佐哈珀说,非常感谢!多年来,我一直怀疑这句话的正确性,但从未抽出时间来确认。所以我现在把它去掉了。还感谢您提供的有用链接,我将查看这些链接: