SQL SSIS 使用派生列转换来处理空数据..替代方案?

问题描述 投票:0回答:3

我有一个包含 200 多个列的源表,我将其放入 SSIS 中并使用“OLEDB Source”组件提供数据,然后将流映射到派生列转换以处理空数字/日期/文本数据将其替换为空白值。

目前,我在派生列中设置以下表达式:

ISNULL([EMPLOYEE ID]) ? "" : [EMPLOYEE ID]

ISNULL([EMPLOYEE FNAME]) ? "" : [EMPLOYEE FNAME]

等等...

由于我有 200 多列,我必须在派生转换中执行 200 次,是否有更好的方法使用 SSIS 处理此问题?

在 Windows 2008R2 上运行 SQL Server 2008 Standard。

sql sql-server-2008 t-sql ssis data-warehouse
3个回答
3
投票

在SSIS中,您可以使用派生列/脚本转换[作为转换]并编写代码将NULL与空白转换。 SSIS 中没有其他替代方案。 SSIS 将创建缓冲区来处理计算。它会减慢你的 SSIS 包的速度。我的建议是尝试在 SQL 查询中使用 ISNULL 函数或 COALESCE 函数,将 NULL 转换为空白,这样所有的转换都会在 Serverside 本身进行。

Select ISNULL(EmployeeId,'')

Select COALESCE(EmployeeId,'')

希望这有帮助。


0
投票

我最终坚持使用 SSIS 的派生列转换并插入每一列并检查 ISNULL([EMPLOYEE FNAME]) ? “”:[员工姓名],因为这是我最了解的方法。


0
投票

参加这里的聚会已经很晚了。但注意到 SSIS 现在有

REPLACENULL(exprToTestForNull, exprToReturnInsteadOfNull)

所以OP:

ISNULL([EMPLOYEE ID]) ? "" : [EMPLOYEE ID]

会变成

REPLACENULL([EMPLOYEE ID], "")

仍然没有

COALESCE(expr1, expr2,..,exprN)
,所以我们仍然需要嵌套 REPLACENULL,例如:

REPLACENULL([Column1],REPLACENULL([Column2],REPLACENULL([Column3],"Unknown")))
© www.soinside.com 2019 - 2024. All rights reserved.