我正在使用.Net 4.0 和 SQL Server 2008 R2。
我正在运行一个大型 SQL 选择查询,它返回数百万个结果,并且需要很长时间才能完全运行。
有谁知道如何只读取查询返回的部分结果,而不必等待整个查询完成?
换句话说,我想在查询仍在运行并获取下一个结果的同时读取前 10,000 个记录块。
这部分取决于查询本身是否是流式的,或者是否在临时表中进行大量工作then(最后)开始返回数据。在第二种情况下,除了重写查询之外,您不能做太多事情;然而,在第一种情况下,迭代器块通常会有所帮助,即
public IEnumerable<Foo> GetData() {
// not shown; building command etc
using(var reader = cmd.ExecuteReader()) {
while(reader.Read()) {
Foo foo = // not shown; materialize Foo from reader
yield return foo;
}
}
}
现在这是一个流式迭代器 - 您可以foreach
它会从传入的 TDS 数据中实时检索记录,而无需先缓冲所有数据。
如果您(也许是明智的)不想编写自己的物化代码,有一些工具可以为您完成此操作 - 例如,LINQ-to-SQLExecuteQuery<T>(tsql, args)
会无痛地完成上述操作。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)