SSIS 包顽固的平面文件连接管理器

Posted

技术标签:

【中文标题】SSIS 包顽固的平面文件连接管理器【英文标题】:SSIS Package Stubborn Flat File Connection Manager 【发布时间】:2016-01-27 00:35:22 【问题描述】:

我每周都会收到一个以竖线分隔的平面文件,该文件有 50 列。我正在尝试使用 SSIS 获取该文件,删除最后 3 列,然后将剩余数据插入到新的管道分隔平面文件中。起初我以为这会很简单,但我有一个顽固的平面文件连接管理器。它不断恢复到带有额外列的入站文件布局,并且当出站文件需要用管道分隔时,它还会继续返回到逗号分隔文件。

我“删除”不需要的列的方式是将它们从入站平面文件连接管理器中删除,因此它们不会列在平面文件源的输出列中,也不会显示给位于平面文件目标的输入列上。

这两个文件的文件名是动态的...不确定是否与它有关。

我将两者的延迟验证都设置为 true,但我不确定还可以尝试什么。我也尝试删除所有这些并重新添加到连接管理器和文件中。

有 2 个平面文件连接管理器,一个用于源,一个用于目标,是否存在一些问题?有没有我缺少的设置?

【问题讨论】:

据我所知,您无法更改平面文件中的列设置。为什么不使用您需要的布局创建平面文件连接(即减去 3 列)。然后(1)写入新文件。 (2) 删除不需要的文件 (3) 用旧文件名重命名新的平面文件? 【参考方案1】:
    删除您的连接管理器和源/目标(有效地重新开始) 使用新的 FF 连接添加平面文件源 (FFSRC) 根据需要设置 FFSRC(管道分隔、标题等)- 不要删除任何行 单击“确定”后,您将返回数据流。右键单击您的平面文件源,然后单击“显示高级编辑器” 转到“输入和输出属性”选项卡,然后展开 FFSRC 输出/输出列。点击一列,然后点击“删除列”。 使用新的连接管理器添加平面文件目标 (FFDST),并映射输入。

您的目的地现在不应该有这些列。

如果平面文件连接似乎因为动态名称而被重置,请考虑将它们作为表达式/变量提供。

为此,请单击源/目标的连接管理器节点(不是数据流节点),然后在“属性”中展开“表达式”。您将希望通过变量使ConnectionString 动态化。

【讨论】:

【参考方案2】:

什么意思

它会不断恢复到带有额外列的入站文件布局,并在出站文件需要用管道分隔时继续返回到逗号分隔文件。

您是否尝试过直接引用该文件,然后设置文件类型(不规则右、定界或固定宽度),然后将表达式应用于连接管理器的 connectionstring 属性?

我建议衣衫褴褛,我可以指定任何我想要的“列”和宽度。

【讨论】:

以上是关于SSIS 包顽固的平面文件连接管理器的主要内容,如果未能解决你的问题,请参考以下文章

ssis excel源无法在设计时获取连接管理器

SSIS条件拆分为平面文件目的地

SSIS Excel 连接管理器无法连接到源

SSIS 连接管理器不存储 SQL 密码

SSIS 包动态连接中的异常处理

SSIS - 8.FTP 任务