0

我以为我在SQL order by 和 left outer join doesn't have correct order中问了一个类似的问题,但这略有不同。我正在使用 SSIS 和标准数据流从另一个 SQL-Server 2005 数据库获取数据。我得到的记录的顺序与源表中的顺序不同(实际上是一个视图)。在较旧的 DTS 中,顺序不会改变。

源或目标表或视图没有排序,通常,我认为如果顺序很重要,那么会指定它。我可能必须让某人指定一个顺序,我们可以继续进行,但我们正在处理历史形状文件,如果属性的顺序发生变化,那么形状指向错误的数据。

数据在导入时更改顺序是否有原因?有解决办法吗?

这就是顺序很重要的原因。它适用于地图应用程序,并且属性和形状必须匹配。如果订单发生变化,则项目将无法正确匹配。不幸的是,我无法确定数据的任何顺序,并且我怀疑之前的编码人员假定了一致的顺序,而这才是最重要的。使用 SSIS 的顺序不是相同的顺序,并且它永远不会显式设置。

4

1 回答 1

4

如果没有显式子句,SELECT则永远无法保证 SQL 服务器语句返回的记录顺序。ORDER BY您很幸运,DTS 选择的数据集按您需要的顺序返回了行。

如果源是视图,则这是双重事实,因为正如您所说,视图没有隐含的顺序。即使添加也不能保证实际返回结果集的顺序(请参阅书籍在线条目TOP 100 PERCENT ... ORDER BY顶部的注释)。

唯一的解决方法是ORDER BY在数据流中的查询中添加一个子句。

从您的问题中尚不清楚您是否在视图中有一组列可以保证返回您需要的顺序 - 如果是这样,请使用有关源数据的更多详细信息更新问题,因为有几种方法可以接近问题。

于 2009-05-15T11:31:29.383 回答