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

Posted

技术标签:

【中文标题】SQL SSIS 使用派生列转换来处理空数据.. 替代方案?【英文标题】:SQL SSIS using Derived Column Transform to deal with null data.. alternatives? 【发布时间】:2012-10-25 03:30:16 【问题描述】:

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

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

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

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

等等……

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

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

【问题讨论】:

【参考方案1】:

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

Select ISNULL(EmployeeId,'')

Select COALESCE(EmployeeId,'')

希望这会有所帮助。

【讨论】:

同意 - 在数据库服务器上处理空值之类的东西通常要好得多,除非 SSIS 机器比数据库服务器强大得多(通常不是这样) . 另外值得一提的是,您可以在数据库中的视图中执行此操作,这可能比将查询嵌入到 SSIS 包本身中更方便。【参考方案2】:

我最终还是坚持使用 SSIS 的派生列转换并插入每一列并检查 ISNULL([EMPLOYEE FNAME]) 吗? "" : [EMPLOYEE FNAME] 因为这是我最熟悉的方法。

【讨论】:

以上是关于SQL SSIS 使用派生列转换来处理空数据.. 替代方案?的主要内容,如果未能解决你的问题,请参考以下文章

SSIS派生列问题

在 SSIS 派生列中将字符串转换为日期

SQL SSIS派生列公式/语法问题

如果条件不满足,派生列表达式SSIS如何忽略表达式?

SSIS在Unicode和非Unicode错误之间转换

在 SSIS 派生列中替换 NULL