使用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天,所以如果有人能协助我完成这项任务,我将不胜感激。
答案 0 :(得分:0)
由于它将第二行与第三行合并,因此听起来第3行的行分隔符不正确,或者在连接管理器中未正确设置。我将看一下Notepad ++中的文件(或文本编辑器,它将显示隐藏的字符,如Cr和Lf)并验证每行的行分隔符是否一致,并且它与连接管理器中设置的一致
一旦排除了行分隔符问题,您就可以使用条件分割来分隔错误记录。在条件下,键入[YourColumnName] ==“”并在“输出名称”下键入“错误”。将默认输出名称命名为“Correct”。现在将“正确”输出映射到表并将“错误”输出映射到平面文件,脚本组件,表或您希望错误发送到的任何格式。
答案 1 :(得分:0)
文件有多大?一种方法是使用临时表。不是临时表..登台表是一个物理表,它保留在数据库中。您将所有记录转储到那里,然后将好数据插入到生产/主表中,然后将坏行导出到一个文件中,您可以将其附加到sendmail任务中。
(然后你可以截断下一个间隔/运行/循环/文件的登台表)
另一种方法是使用条件分割,然后将每一行设置为一个变量,然后将一个格式应用于该变量,附加管道以外的分隔符,然后再导入到导出文件中。