SQL Server表默认排序

时间:2010-04-15 05:25:48

标签: sql ssis

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

2 个答案:

答案 0 :(得分:11)

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

由于从表中检索数据的方式,可能会对这些集进行排序。这可能基于主键,插入顺序,聚类键,基于查询的执行计划或表中的实际数据甚至是月相的看似随机顺序。

底线,如果您想要特定订单,请使用order by。如果您不想要特定订单,DBMS可以按任何顺序交付您的行,包括基于第一列的行。

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

如果要避免默认排序(可能是变量),请使用特定排序。

答案 1 :(得分:7)

一般情况下,如果选择查询中没有排序,则不会应用

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

总而言之,如果您没有指定排序,则无法进行排序。