SSIS 中的条件数据验证

Posted

技术标签:

【中文标题】SSIS 中的条件数据验证【英文标题】:Conditional Data Validation In SSIS 【发布时间】:2021-02-05 13:33:19 【问题描述】:

我有一种情况,表有两个主要列 DataFieldName 和 DataFieldValue 以及一些标识符,例如 OrderNumber。

现在在 DataFieldName 中有一个名为“OrderDate”的值,并且相应的日期将出现在 DataFieldValue 中。

但是“OrderDate”的一些值是非日期值。我需要根据 DataFieldName 的值为“OrderDate”的条件验证此类非日期值,然后验证 DataFieldValue 在 SSIS 中的有效日期。

【问题讨论】:

我建议你修复你的数据模型。就像现在一样,它更适合用于 noSQL 数据库或者可能作为未经验证的 JSON。 首先,您可以添加条件拆分并将所有带有“OrderDate”的行传递给单独的处理任务。然后,您可以尝试添加数据类型转换并将转换失败的所有行重定向到单独的输出。或者,您可以在数据流中添加转换脚本组件,并在那里检查正确的日期值,然后再次将错误的行重定向到另一个输出。 【参考方案1】:

您可以使用Conditional Split 拆分数据:

如果您使用的是 SQL,则为带有条件的查询:

SELECT DataFieldName, DataFieldValue FROM yourTable
WHERE DataFieldName LIKE 'OrderDate'

如果您使用的是 SQL Server:

SELECT   
    CASE WHEN TRY_CONVERT(date, DataFieldValue) IS NULL   
    THEN 'Cast failed'  
    ELSE 'Cast succeeded'  
END AS Result 
FROM yourTable

如果您使用的是 Oracle:

SELECT cast(DataFieldValue AS NUMBER DEFAULT NULL ON CONVERSION ERROR) FROM yourTable

或者,您可以使用Data Conversion Transformation 组件:

然后您可以将输出重定向到一个平面文件,例如:

【讨论】:

以上是关于SSIS 中的条件数据验证的主要内容,如果未能解决你的问题,请参考以下文章

使用 SQL 身份验证执行 SSIS 包

SSIS 包在 Visual Studio 2010 中卡住了“验证 Excel 源”

SSIS:无法创建OLE DB访问器。验证列元数据是否有效

SSIS 脚本转换错误远程服务器返回错误:(407) 需要代理身份验证

如何使用用户名和传递以及 SSIS 中的动态令牌从 API 获取数据

更改 SQL 列的数据类型时更新 SSIS 包