在使用平面文件源和SQL SERVER目标的时候,会发现在平面文件源中,和SQL SERVER目标的”高级”设置中.有一个”保留空值”的选项.
如果设置这两个选项会得到什么样的结果呢?.
假如,我们现在有一个文本文件,内容如下:
liangck,小梁,,21,2009-10-09
,兰儿,女,,
lan,,,,
其中有一些列为空.如果此时,不选中在平面文件源中的”保留源中的空值”的话,
那么.如果列类型为字符串,则返回长度为0的字符串’’
如果列类型为数值,则返回数值0
如果列类型为日期的话,则返回1753-01-01 00:00:00
这个我们可以通过例子来证明.
1. 创建一个平面文件源,不选择”在数据源中保留源中的空值”
然后选择上面的文本文件.
然后在”高级”中设置各列的类型.
列 类型
ID DT_STR
Name DT_WSTR
Sex DT_WSTR
Age DT_I2
LastAccess DT_DBTIMESTAMP
然后导入到目标表当中.目标的设置不介绍了.就选择Connection和设置映射即可.
CREATE TABLE tb2 (
[ID] VARCHAR(50),
[Name] NVARCHAR(50),
[Sex] NVARCHAR(2),
[Age] SMALLINT,
[LastAccess] DATETIME
)
可以看到.没有一个列为标识为null,而是采用了某个类型的最小默认值.
如果此时,选中平面文件源中的”保留数据流中数据源的空值”,将会这样的结果
OK.源中保留空值和不保留空值介绍完.再介绍SQL SERVER目标中.选中”保留空值”
如果在平面文件源中.不选中”保留数据流中数据源的空值”那么.列的值,已经用了某个类型中的最小默认值了,也就是说,列不为null了,而是使用了一个具体的值..此时,再设置SQL SERVER目标的”保留空值”的话,已经没有效了.
如果在平面文件源中.选中了”保留数据流中数据源的空值”的话,那么.如果不存在的数据.则用null标识.如果此时在SQL SERVER目标中.选择了”保留空值”.那就会用null标识空值.即使列中默认值也是.如果不选择目标中的”保留空值”的话,那如果有默认值,则用默认值,如果没有,则用null标识.
如:
--目标表
CREATE TABLE tb3(
[ID] VARCHAR(50),
[Name] NVARCHAR(50) DEFAULT 'lan',
[Sex] NVARCHAR(2),
[Age] SMALLINT,
[LastAccess] DATETIME
)
选中了 “保留数据流中数据源的空值” + 不选中 “保留目标的空值”
选中了 ”保留数据流中数据源的空值” + 选中 “保留目的空值”