SSIS 处理NULL

Posted 悦光阴

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SSIS 处理NULL相关的知识,希望对你有一定的参考价值。

不同于SQL Server中NULL表示值是未知的(Unknown Value),没有数据类型,但是,在SSIS中,NULL是有数据类型的,要获取某一个NULL值,必须指定数据类型,例如,变量 Int32的“NULL值”是 NULL(DT_I4),默认值是0。对于变量和参数,不允许有NULL值,因此,NULL值是指默认值,如果变量或参数的值未被显式设置时,SSIS使用默认值。对于Data Flow组件,SSIS保持源数据的NULL值。

一,Variable和Parameter的默认值

在SSIS中,变量不能被设置为NULL,在缺少值时,每种数据类型的变量都会使用默认值:

  • 字符类型的默认值是空字符“”,数据类型是DT_WSTR;
  • 数值类型的默认值是0;
  • Boolean类型的默认值是False;
  • DateTime的默认值是 “12/30/1899 12:00:00 AM”;

例如,变量varIntNull的Data Type是Int32,使用Expression:NULL(DT_I4) 为其赋值,则该变量的默认值是0。

如果需要测试变量是否缺失值,可以将变量的值和变量数据类型对应的默认值进行比较,

例如:@[User::MyStringVar]=="",如果表达式返回True,说明变量缺失值;如果表达式返回False,说明变量有值。

二,在Data Flow Task中处理NULL值

在Data Flow中,NULL有Data Type,必须使用NULL(Data_Type)来获取某个Data Type的NULL。要确定某个值是不是NULL,使用ISNULL(Data_Column),这个函数返回值是boolean,如果返回值是True,说明该数据是NULL。如果当ISNULL(Data_Column)返回true时,替换该数据,可以使用如下语句实现TSQL Isnull 函数相同的功能:ISNULL(Data_Column)? DEFAULT_VALUE : Data_Column

例如,列City是varchar(10),当该列为null时,将其替换为字符串"Unknown",在Derived Column转换组件中,增加一个新列,设置Expression是:

(DT_STR,10,1252)(ISNULL(City) ? "Unknown" : City) 

技术分享

 

以上是关于SSIS 处理NULL的主要内容,如果未能解决你的问题,请参考以下文章

SSIS 空值问题

处理添加 XMLA 度量值组 SSIS

SSIS 包动态连接中的异常处理

SSIS 事务处理

SSIS 数据流脚本任务错误处理

SSIS 处理大量平面文件非常缓慢