在SSIS 2012

时间:2016-03-24 10:23:25

标签: ssis

我对SSIS有点新意。我正在使用SSIS 2012.输入文件是excel,csv和txt。

必须将数据从输入文件转储到数据库。输入文件中列的大小不断变化,所以我不能坚持固定的长度。将包中连接管理器的数据类型更改为ntext可以解决此问题,但我们也有性能约束。因此,客户倾向于截断额外数据并使他们亲密,而不是影响性能。

行重定向将给出截断的行。但我想让每个文件中的客户都知道截断的列。

SSISDB是否跟踪截断的数据。如果是这样的话。

我打算将截断的数据写入单独的文件,然后使用脚本组件来比较每列的长度。有没有更好的方法。

2 个答案:

答案 0 :(得分:1)

将截断的行(重定向)写入表中。您可以添加一个派生列,以在重定向输入和写入表的输出之间添加源文件的名称(如果您将包保存在变量中)。

如果在每次运行之前截断表,则使用简单的ExecuteSQL将行数计入变量,然后在计数> 0时将电子邮件发送给客户。

答案 1 :(得分:1)

好的,据我所知,SSIS中没有任何内容可以自动跟踪哪些列被截断。

我可以想到几种方法来处理这个问题,它们都需要在脚本转换中出现主要逻辑。

如果我必须这样做,我会创建一个脚本组件"预测"在将它们传递给数据流的其余部分之前,哪些列将被截断。

当您使用LEFT()将每个字符串截断为所需的长度时,您可以事后检查旧字符串和新字符串是否相同。

如果没有,那么您知道已发生截断,并且您可以填充要在发送电子邮件任务中使用的变量。

或者您可以先使用派生列截断列,然后使用脚本转换将旧列与新列进行比较。同样的逻辑。