在SSIS包中记录/通过电子邮件发送跳过的记录

时间:2011-12-19 22:07:15

标签: sql-server ssis flat-file

使用SQL 2008 R2,我创建了一个SSIS包,它可以翻阅平面文件并将它们导入SQL表。

如果数据文件中的任何记录不包含所有必填字段,则应在导入过程中跳过该记录。当包完成时,所有跳过的记录都应该通过电子邮件发送给我。

Here's the data file structure:
123|ABC|Y|Y
784
456|DEF|Y|Y
789|GHI|Y|N
812||Y|N
...

因此,在这种情况下,我希望导入第1,第3和第4条记录,并跳过第2和第5条记录并通过电子邮件发送。

我尝试按原样测试它,因为它查找管道分隔符,它会将第二行与第三行一起读取为:

784456|DEF|Y|Y

我和SSIS一起工作了大约3天,所以如果有人能协助我完成这项任务,我将不胜感激。

2 个答案:

答案 0 :(得分:0)

由于它将第二行与第三行合并,因此听起来第3行的行分隔符不正确,或者在连接管理器中未正确设置。我将看一下Notepad ++中的文件(或文本编辑器,它将显示隐藏的字符,如Cr和Lf)并验证每行的行分隔符是否一致,并且它与连接管理器中设置的一致

一旦排除了行分隔符问题,您就可以使用条件分割来分隔错误记录。在条件下,键入[YourColumnName] ==“”并在“输出名称”下键入“错误”。将默认输出名称命名为“Correct”。现在将“正确”输出映射到表并将“错误”输出映射到平面文件,脚本组件,表或您希望错误发送到的任何格式。

答案 1 :(得分:0)

文件有多大?一种方法是使用临时表。不是临时表..登台表是一个物理表,它保留在数据库中。您将所有记录转储到那里,然后将好数据插入到生产/主表中,然后将坏行导出到一个文件中,您可以将其附加到sendmail任务中。

(然后你可以截断下一个间隔/运行/循环/文件的登台表)

另一种方法是使用条件分割,然后将每一行设置为一个变量,然后将一个格式应用于该变量,附加管道以外的分隔符,然后再导入到导出文件中。