C#学习教程:从SQL Server批量获取记录的最佳方法是什么分享


从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

上述就是C#学习教程:从SQL Server批量获取记录的最佳方法是什么分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—猴子技术宅(www.ssfiction.com)

  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)..... 

本文来自网络收集,不代表猴子技术宅立场,如涉及侵权请点击右边联系管理员删除。

如若转载,请注明出处:https://www.ssfiction.com/ckf/1031982.html

发表评论

邮箱地址不会被公开。 必填项已用*标注