处理派生列中默认值的类型转换和条件
Handle both Type cast and Condition for Default in Derived Column
我创建了一个 SSIS 程序包,其中必须将两列 varchar(1) 类型映射到整数列。我使用 Derived Column 进行这项工作,并为这两个字段提供类型转换 (DT_I4)。但是,我发现在完整的数据集中,这两个字段中有没有值的记录,因此我必须键入 Cast 并在表达式中添加一个条件,如果 null 则默认为“0”。
到目前为止,我已经尝试了以下但无效
(IsNull[Notes Taken])?(DT_I4)"0":[Notes Taken]
(DT_I4)(IsNull[Notes Taken])?"0":[Notes Taken]
如何正确创建这个表达式
最简单的解决方案是使用 REPLACENULL
函数,例如:
REPLACENULL([Notes Taken], "0")
然后 - 将其转换为 DT_I4
。此函数用条件运算符替换您设计的逻辑。
你的两个公式都有错误。最突出的 - ISNULL
是一个函数,需要在其参数周围加上括号,ISNULL([Notes Taken])
,括号仅定义数据流列。参见 MS Docs。
然后,你的第一个表达式
(IsNull[Notes Taken])?(DT_I4)"0":[Notes Taken]
可能字段 [Notes Taken]
与 DT_I4
的数据类型不匹配,DT_I4
是 ? :
运算符的第一个参数的数据类型。
你的第二个表达
(DT_I4)(IsNull[Notes Taken])?"0":[Notes Taken]
将数据转换应用于逻辑函数 ISNULL
,而不是完整的表达式。您应该将括号放在完整的 ? :
运算符周围,例如:
(DT_I4)(IsNull([Notes Taken])?"0":[Notes Taken])
我创建了一个 SSIS 程序包,其中必须将两列 varchar(1) 类型映射到整数列。我使用 Derived Column 进行这项工作,并为这两个字段提供类型转换 (DT_I4)。但是,我发现在完整的数据集中,这两个字段中有没有值的记录,因此我必须键入 Cast 并在表达式中添加一个条件,如果 null 则默认为“0”。
到目前为止,我已经尝试了以下但无效
(IsNull[Notes Taken])?(DT_I4)"0":[Notes Taken]
(DT_I4)(IsNull[Notes Taken])?"0":[Notes Taken]
如何正确创建这个表达式
最简单的解决方案是使用 REPLACENULL
函数,例如:
REPLACENULL([Notes Taken], "0")
然后 - 将其转换为 DT_I4
。此函数用条件运算符替换您设计的逻辑。
你的两个公式都有错误。最突出的 - ISNULL
是一个函数,需要在其参数周围加上括号,ISNULL([Notes Taken])
,括号仅定义数据流列。参见 MS Docs。
然后,你的第一个表达式
(IsNull[Notes Taken])?(DT_I4)"0":[Notes Taken]
可能字段 [Notes Taken]
与 DT_I4
的数据类型不匹配,DT_I4
是 ? :
运算符的第一个参数的数据类型。
你的第二个表达
(DT_I4)(IsNull[Notes Taken])?"0":[Notes Taken]
将数据转换应用于逻辑函数 ISNULL
,而不是完整的表达式。您应该将括号放在完整的 ? :
运算符周围,例如:
(DT_I4)(IsNull([Notes Taken])?"0":[Notes Taken])