我有一个简单的SSIS程序包,在该程序包中,我将数据从平面文件导入SQL Server表(SQL Server 005)。文件包含70k行,表没有主键。导入成功,但是当我打开SQL Server表时,行的顺序与文件的顺序不同。仔细观察后,我看到表中的数据默认情况下按第一列排序。为什么会这样呢?以及如何避免默认排序?谢谢。
除非您order by在SQL查询中指定,否则您不能依赖排序。SQL是可与集合一起使用的关系代数。这些集合是无序的。数据库表没有内部顺序。
order by
由于从表中检索数据的方式,这些集很可能是有序的。这可以基于主键,插入顺序,聚簇键,基于查询的执行计划或表中实际数据甚至月相的看似随机的顺序。
底线是,如果您要特定的订单,请使用order by。如果您不希望特定的顺序,则DBMS可以自由地以 任何 顺序交付行,包括基于第一列的行。
如果确实要根据导入文件中的位置对它们进行排序,则应在表中添加另一列,以根据其在该文件中的位置存储数量递增的数字。然后使用order by使用该列。但这是一个非常随意的排序顺序,通常最好选择对数据更有意义的一种(事务ID,日期/时间,客户编号或其他任何方式)。
如果要避免默认排序(可能是变量),请使用特定的排序。