当源值为空时没有设置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
答
你可以写在数据流SQL命令CASE语句任务:
select
CASE
when PhoneNumber IS NUll then '1234567' else table_name.PhoneNumber END as PhoneNumber,
from table table_name
+0
我知道我可以做到这一点,但我仍然想知道为什么这不会发生“例如,如果数据文件中有一个空字段,则该列的默认值将被加载。“根据上面的文件 – sam
我知道我可以做到这一点,但我仍然想知道为什么不会发生这种情况。“例如,如果数据文件中有空字段,则默认值因为该列被加载,而不是。“根据上面的文档 – sam
另一个来源说同样的事情...保留空 - 默认情况下,此设置是未选中的,这意味着在插入到目标表过程中将插入默认值(如果在目标列上定义了默认约束)如果NULL值来自该特定列的源。如果选中此选项,则目标表列的默认约束将被忽略,并且源列的保留NULL将被插入到目标中。参考https://www.mssqltips.com/sqlservertip/1840/sql-server-integration-services-ssis-best-practices/ – sam