【问题标题】:SSIS moving Dirty/Failed Rows to File or TableSSIS 将脏/失败行移动到文件或表
【发布时间】:2014-07-24 07:47:58
【问题描述】:

我有一个 SSIS 包,它从一台服务器上的 SQL SERVER 2008 TABLE(表 A)获取数据到另一台服务器上的 SQL SERVER 2008 表(表 B),然后转换数据并将其移动到另一个表。

我正在使用数据流任务来执行上述操作。 两个表中的2列,第1列和第2列的数据类型分别是varchar(60)和varchar(50)。

我需要将临时表B表中的数据导入最终表(表C)。上述2列的数据类型是表C中的int类型。我正在转换上述2列导入数据时转换为 int 数据类型,为此我有一个数据流任务,其中 OLEDB 源 有以下查询:

选择 CAST(第 1 列作为整数),第 2 列作为整数) 从表 B

我有 2 个 SQL 表,即 OLEDB 数据源,一个通过绿色箭头具有正确的行(已成功转换为 int),另一个通过红色箭头具有错误的行(引发错误)。(它被配置为仅在转换错误时重定向行,它在发生截断错误时具有“失败组件”选项)oledb目标表与源表具有相同的结构。

当我运行将数据从源表导入目标表的数据流任务时,出现错误 “强制转换规范的字符值无效”或数据转换错误。 我不希望它抛出错误,而是将错误的行重定向到与目标表具有相同结构的错误表,具有相同结构的源表具有错误号和列名

使用数据转换任务并重定向错误行是否是个好主意,方法是在转换和截断时配置错误输出,或者仅在转换时配置错误输出,或者仅在发生转换错误时强制转换值并重定向行?

【问题讨论】:

    标签: ssis


    【解决方案1】:

    由于 CAST 错误发生在 SQL 引擎中,您无法使用 SSIS 重定向这些行。我会使用数据转换任务并重定向错误行。

    FWIW 我不喜欢“错误表”——根据我的经验,没有人会看它们。我更喜欢“积极加载”风格(即使名字很酷),你强制所有行进入并让分析师解释差异。他们很快就开始解决严重的问题,因为他们扭曲了他们的结果。总会有低水平的小错误,最好不要挂断电话,生命如此短暂……

    【讨论】:

    • 嗨,迈克,我们正在将文件数据加载到表中,我们可以提供分析人员进行更正,大文件的更正有点复杂。我制作了包含 1,00,000 行的文件,其中文件中出现错误行的可能性小于 50-100。如果想将这些脏行复制到表或文件中,并提供给用户更正和进行数据移动的文件。
    • 理论上听起来不错。在实践中,错误文件会逐渐被忽略(在最初的热情之后),并且您的数据完整性会稳步下降。当决策者意识到这一点时,他们就会对你的整个应用失去信心,你的整个项目就会变得毫无意义。
    猜你喜欢
    • 2013-03-18
    • 1970-01-01
    • 1970-01-01
    • 2015-05-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-17
    • 1970-01-01
    相关资源
    最近更新 更多