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

时间:2015-10-27 14:31:30

标签: ssis

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

我删除"的方式不需要的列只是从入站平面文件连接管理器中删除它们,因此它们不会在平面文件源的输出列中列出,并且它们不会显示在输入列的输入列上平面文件目的地。

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

我将延迟验证设置为true,但我不确定还要尝试什么。我还尝试删除所有内容并添加回连接管理器和文件。

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

2 个答案:

答案 0 :(得分:2)

  1. 删除连接管理器和源/目标(有效地重新开始)
  2. 使用新的FF连接添加平面文件源(FFSRC)
  3. 根据需要设置FFSRC(管道分隔,标题等) - 不要删除任何行
  4. 点击“确定”后,您将返回数据流。右键单击平面文件源,然后单击“显示高级编辑器”
    advanced editor option
  5. 转到“输入和输出属性”选项卡,然后展开FFSRC输出/输出列。单击一列,然后单击“删除列” remove column
  6. 使用新的连接管理器添加平面文件目标(FFDST),并映射输入。
  7. 您的目的地现在不应该包含这些列。

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

    为此,请单击源/目标的连接管理器节点(而不是数据流节点),然后在“属性”中,展开“表达式”。您需要通过变量生成var details =['session', 'dates','faculty', 'hours']; var cartArray = $('.cartItemDetail').map(function(){ var $cartElem = $(this); var data ={ item_id: $cartElem.data('item_id') } $.each(details, function(i, className){ data[className] = $cartElem.find('.'+className).text(); }); return data }).get(); 动态。

答案 1 :(得分:0)

你是什么意思

  

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

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

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