8

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

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

select * from table_name

要制定一些批量逻辑,没有标识列,也没有任何日期列等。

信息:截至目前,该应用程序正在获取多达 3500 - 5000 条记录并存储到 MongoDB 中,然后它会引发如下错误:

System.Runtime.InteropServices.SEHException (0x80004005):外部组件已引发异常。

问题:谁能建议我一些逻辑来解决从 SQL Server 批量读取/获取的问题?

4

2 回答 2

9

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

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

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

于 2013-05-11T06:37:17.210 回答
9

如果您不能OFFSET-FETCH在 SQL Server 2012 中使用并假设表具有允许您唯一标识行的主键或列,让我们调用它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
于 2013-05-11T06:51:28.730 回答