我对SSIS有点新意。我正在使用SSIS 2012.输入文件是excel,csv和txt。
必须将数据从输入文件转储到数据库。输入文件中列的大小不断变化,所以我不能坚持固定的长度。将包中连接管理器的数据类型更改为ntext
可以解决此问题,但我们也有性能约束。因此,客户倾向于截断额外数据并使他们亲密,而不是影响性能。
行重定向将给出截断的行。但我想让每个文件中的客户都知道截断的列。
SSISDB是否跟踪截断的数据。如果是这样的话。
我打算将截断的数据写入单独的文件,然后使用脚本组件来比较每列的长度。有没有更好的方法。
答案 0 :(得分:1)
将截断的行(重定向)写入表中。您可以添加一个派生列,以在重定向输入和写入表的输出之间添加源文件的名称(如果您将包保存在变量中)。
如果在每次运行之前截断表,则使用简单的ExecuteSQL将行数计入变量,然后在计数> 0时将电子邮件发送给客户。
答案 1 :(得分:1)
好的,据我所知,SSIS中没有任何内容可以自动跟踪哪些列被截断。
我可以想到几种方法来处理这个问题,它们都需要在脚本转换中出现主要逻辑。
如果我必须这样做,我会创建一个脚本组件"预测"在将它们传递给数据流的其余部分之前,哪些列将被截断。
当您使用LEFT()将每个字符串截断为所需的长度时,您可以事后检查旧字符串和新字符串是否相同。
如果没有,那么您知道已发生截断,并且您可以填充要在发送电子邮件任务中使用的变量。
或者您可以先使用派生列截断列,然后使用脚本转换将旧列与新列进行比较。同样的逻辑。