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

SQL Server表按默认值排序

  •  3
  • pramodtech  · 技术社区  · 14 年前

    我有一个简单的ssis包,在其中我将数据从平面文件导入到SQL Server表(SQL Server 005)。文件包含70k行,表没有主键。导入成功,但当我打开SQL Server表时,行的顺序与文件的顺序不同。仔细观察后,我发现表中的数据默认按第一列排序。为什么会这样?如何避免默认排序? 谢谢。

    2 回复  |  直到 7 年前
        1
  •  11
  •   paxdiablo    12 年前

    除非指定,否则不能依赖于排序 order by 在您的SQL查询中。SQL是一个与集合一起工作的关系代数。那些套是无序的。数据库表没有内部顺序。

    很可能由于从表中检索数据的方式而对集合进行了排序。这可能基于主键、插入顺序、聚集键、基于查询执行计划或表中的实际数据甚至月球阶段的看似随机的顺序。

    底线是,如果您想要特定的订单,请使用 按顺序 . 如果您不需要特定的顺序,DBMS可以自由地将您的行传递到 任何 订单,包括基于第一列的订单。

    如果确实希望根据导入文件中的位置对它们进行排序,则应向表中添加另一列,以根据其在该文件中的位置存储递增的数字。然后使用 按顺序 使用那个列。但这是一个相当随意的排序顺序,您通常最好选择一个对数据更有意义的排序顺序(事务ID、日期/时间、客户编号或其他您拥有的排序顺序)。

    如果要避免使用默认排序(无论变量如何),请使用特定排序。

        2
  •  7
  •   Adriaan Stander    14 年前

    一般来说,没有秩序 应用 如果在选择查询中没有排序。

    我注意到表格的结果 可以 按主键的顺序返回,但这也不是Gaurenteed。

    总之,如果不指定排序,就不能假定排序。