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 使用派生列转换来处理空数据.. 替代方案?的主要内容,如果未能解决你的问题,请参考以下文章