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

本文关键字:最佳 方式 是什么 记录 获取 SQL Server | 更新日期: 2023-09-27 18:13:01

场景:我们正在从SQL Server获取行到c#。Net console应用程序,并通过存储过程对从SQL Server检索到的数据进行操作;操作完成后,新的数据将通过c# -MongoDB-Driver存储到MongoDB中。

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

select * from table_name

要计算一些批处理逻辑,没有标识列,也没有日期列之类的。

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

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

问题:有没有人能给我一些逻辑来解决批量读取/读取SQL Server?

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

如果你不能在SQL Server 2012中使用OFFSET-FETCH,假设表有一个主键或列(s),允许你唯一地标识一行,让它称为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

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

示例:SELECT … ORDER BY orderid OFFSET 25 ROWS只获取后面的25行。

表示该查询将返回25到50条记录。ORDER BY子句是强制性的,所以如果你不想使用顺序,使用ORDER BY (SELECT NULL)