当源值为空时没有设置SSIS默认值

问题描述:

问题: OLEDB源在手机中具有空值。 目标表有电话NOT NULL DEFAULT 1234567 OLEDB目的地已经保持空值未选中当源值为空时没有设置SSIS默认值

据我读到这里https://msdn.microsoft.com/en-us/library/ms187887(v=sql.110).aspx

如果传入的值为NULL应插入列的默认值。

但没有发生。我不想在SSIS中进行任何转换。有人可以帮忙吗?

我相信答案是Keep Nulls选项工作的列必须从数据源中丢失。

创建表#tmpdel ( 一个INT NOT NULL默认0, b INT NOT NULL默认0 )

插入#tmpdel的(a)的值(1) - WORKS INSERT INTO #tmpdel( a,b)values(1,null) - FAILS

在您的数据流任务,在OLE_DB源,​​设置数据访问模式设置为“SQL命令”,写出来的select语句如下

SELECT Column_A 
    ,Column_B 
    ,ISNULL(Phone, 1234567) 
    ,Column_C 
    ,Column_D etc. 
FROM Source_Table 
+0

我知道我可以做到这一点,但我仍然想知道为什么不会发生这种情况。“例如,如果数据文件中有空字段,则默认值因为该列被加载,而不是。“根据上面的文档 – sam

+0

另一个来源说同样的事情...保留空 - 默认情况下,此设置是未选中的,这意味着在插入到目标表过程中将插入默认值(如果在目标列上定义了默认约束)如果NULL值来自该特定列的源。如果选中此选项,则目标表列的默认约束将被忽略,并且源列的保留NULL将被插入到目标中。参考https://www.mssqltips.com/sqlservertip/1840/sql-server-integration-services-ssis-best-practices/ – sam

你可以写在数据流SQL命令CASE语句任务:

select 
CASE 
when PhoneNumber IS NUll then '1234567' else table_name.PhoneNumber END as PhoneNumber, 

from table table_name 
+0

我知道我可以做到这一点,但我仍然想知道为什么这不会发生“例如,如果数据文件中有一个空字段,则该列的默认值将被加载。“根据上面的文件 – sam