DataReader.NextResult 检索结果是不是总是相同的顺序
Posted
技术标签:
【中文标题】DataReader.NextResult 检索结果是不是总是相同的顺序【英文标题】:Does DataReader.NextResult retrieves the result is always the same orderDataReader.NextResult 检索结果是否总是相同的顺序 【发布时间】:2009-12-31 13:44:29 【问题描述】:我有一个 SELECT 查询,它产生多个结果并且没有任何 ORDER BY 子句。 如果我多次执行此查询,然后使用 DataReader.NextResult() 遍历结果,是否可以保证以相同的顺序获得结果?
例如如果我执行以下返回 199 行的查询:
SELECT * FROM products WHERE productid < 200
如果 productid = 1 等,我总是会得到第一个结果吗?
据我观察,它总是以相同的顺序返回结果,但我找不到任何有关此行为的文档。
=======================================
根据我的研究: 查看此博客Conor vs. SQL。我实际上想问即使表中的数据保持不变(即没有更新或删除),查询结果是否也会发生变化。但似乎在大表的情况下,当 SQL Server 员工并行时,顺序可以不同
【问题讨论】:
【参考方案1】:首先,要迭代DataReader
中的行,您应该调用Read
,而不是NextResult
。
如果您的查询有多个 SELECT
语句,则调用 NextResult
将移动到下一个结果集。
要回答你的问题,你不能依赖这个。
不带 ORDER BY
子句的查询将按照 SQL Server 的默认迭代顺序返回行。
对于小表,这通常是添加行的顺序,但这不能保证并且随时可能更改。例如,如果表被索引或分区,则顺序会有所不同。
【讨论】:
【参考方案2】:不,DataReader 将按照它们从 SQL 中返回的顺序返回结果。如果您不指定 ORDER BY 子句,那将是它们在表中存在的顺序。
【讨论】:
我同意罗里的观点。如果您希望它按特定顺序排列,则应在 SQL 语句中添加 Order By。【参考方案3】:有可能,甚至可能它们总是以相同的顺序返回,但这不能保证。顺序由数据库服务器上的查询计划(至少在 SQL Server 中)确定。如果某些事情改变了查询计划,那么顺序可能会改变。如果结果的顺序对您处理数据很重要,则应始终使用 ORDER BY。
【讨论】:
以上是关于DataReader.NextResult 检索结果是不是总是相同的顺序的主要内容,如果未能解决你的问题,请参考以下文章