【问题标题】:Logging/Emailing skipped records in SSIS Package在 SSIS 包中记录/发送电子邮件跳过的记录
【发布时间】:2011-12-19 22:07:14
【问题描述】:

使用 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 天,所以如果有人可以帮助我完成这项任务,我将不胜感激。

【问题讨论】:

    标签: sql-server ssis flat-file


    【解决方案1】:

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

    (然后您可以为下一个间隔/运行/循环/文件截断暂存表)

    另一种方法是使用条件拆分,然后将每一行设置为一个变量,然后应用一个格式,附加一个分隔符而不是管道,然后到导出文件中。

    【讨论】:

    • 文件有 40k 行...我认为我的问题是如何将好与坏分类...
    【解决方案2】:

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

    一旦行分隔符问题得到解决,您可以使用条件拆分来分隔错误记录。在条件下,输入 [YourColumnName] == "",在输出名称下,输入错误。将默认输出名称命名为“正确”。现在将“正确”输出映射到您的表格,并将“错误”输出映射到平面文件、脚本组件、表格或您希望错误转至的任何格式。

    【讨论】:

    • 好吧,这些行是在每个字段的分隔符设置为 | 的地方设置的。最后一个字段设置为 Lf。所以,它为什么要合并它们是有道理的,因为如果它没有找到管道,它会一直搜索直到找到。至于您的解决方案,我将在一周内研究这种有条件的拆分,看看是否可以解决。我可能不会在假期之前得到这个,但如果我在假期之后得到它并且它有效,我会接受你的回答......
    • 在我看来,平面文件仍然是问题所在。它正在合并行,因为它没有找到行分隔符。如果 Lf 在第 3 行的末尾,它将识别该行已完成并开始新的行。我强烈建议您下载 Notepad ++ 并从此处确认:notepad-plus-plus.org/download/v5.9.6.2.html。否则,你可能会追赶你的尾巴。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-16
    • 1970-01-01
    相关资源
    最近更新 更多