这个问题是朋友遇到的,做一个SSIS的程序将数据导入到txt。然后再用Oracle的工具导入到Oracle。但是在SSIS中执行变量脚步的时候,发现输出的列名称跟查询的列名称完全不同。比如Schema_id在查询的第三列,但是输出的时候到了第6列。

如图:

SSIS 执行变量中的脚步输出列顺序与SQL查询列顺序不同 _SSIS

SSIS 执行变量中的脚步输出列顺序与SQL查询列顺序不同 _SSIS_02

因为txt的格式已经定义好了,而且解析的程序也已经做好,所以如果txt列顺序有问题就会影响到后面的操作。查了一下好像没有地方可以调整输出量的顺序。

当然这个问题可以通过调整目标列的顺序解决,但是需要手动的调整,如果列多了比较麻烦。

另外测试了一下直接从Table或者命令查询就不会有这个问题,感觉微软在解析变量脚步的时候没有考虑到排序。

之后发现一篇Blog也提到这个问题:SSIS 系列 - 变量查询语句引起列输出顺序不一致的解决方法

可以用下面的办法:

解决的方法虽然也需要人工手动操作,但是比起在文件管理器中删除新建要容易的多,回到数据源的列,先取消全部可用的列。

SSIS 执行变量中的脚步输出列顺序与SQL查询列顺序不同 _SQL查询顺序_03

然后对照查询语句列的顺序,依次选中需要的列,比如第一个先勾选 BusinessEntityID,第二个再勾选 NationalIDNumber,后面根据需要按顺序依次勾选。

SSIS 执行变量中的脚步输出列顺序与SQL查询列顺序不同 _SSIS_04

按顺序选择完成之后,这样所有的列又按照查询顺序输出了。

SSIS 执行变量中的脚步输出列顺序与SQL查询列顺序不同 _SSIS_05

需要重新建立新的文件链接管理器,这样可以避免之前的缓存影响,再来看管理器中的列顺序也是对应一致的,没有问题了。

SSIS 执行变量中的脚步输出列顺序与SQL查询列顺序不同 _SSIS_06