代码之家  ›  专栏  ›  技术社区  ›  ata

datareader.nextresult检索结果的顺序是否始终相同

  •  0
  • ata  · 技术社区  · 16 年前

    我有一个select查询,它产生多个结果,没有任何order by子句。 如果我多次执行此查询,然后使用datareader.nextresult()迭代结果,是否保证以相同的顺序获得结果?

    例如,如果我执行以下返回199行的查询:

    SELECT * FROM products WHERE productid < 200
    

    如果productID=1等等,我会得到第一个结果吗?

    据我观察,它总是以相同的顺序返回结果,但我找不到任何有关此行为的文档。

    ======================

    根据我的研究: 查看此日志 Conor vs. SQL . 实际上,我想问一下,即使表中的数据保持不变(即没有更新或删除),查询结果是否会改变。但对于大型表,当SQL Server员工并行时,顺序可能不同

    3 回复  |  直到 16 年前
        1
  •  7
  •   SLaks    16 年前

    首先,迭代 DataReader ,你应该打电话 Read 不是 NextResult .
    打电话 下一个结果 如果查询有多个 SELECT 声明。

    要回答你的问题,你不能依赖这个。
    一个没有 ORDER BY 子句将按SQL Server的默认迭代顺序返回行。
    对于小桌子,这个可以 通常 是添加行的顺序,但这不保证并且随时可能更改。例如,如果表是索引或分区的,则顺序将不同。

        2
  •  3
  •   Rory    16 年前

    不,DataReader将按从SQL返回的顺序返回结果。如果不指定ORDER BY子句,那么这将是它们在表中存在的顺序。

        3
  •  1
  •   BBlake    16 年前

    这是有可能的,甚至可能他们总是以相同的顺序返回,但这并不能保证。顺序由数据库服务器上的查询计划(至少在SQL Server中)确定。如果有什么改变了这个查询计划,那么顺序可能会改变。如果结果的顺序对处理数据很重要,则应始终使用ORDER BY。

    推荐文章