为啥派生列组件的表达式不适用于 SSIS 中的空值?
Posted
技术标签:
【中文标题】为啥派生列组件的表达式不适用于 SSIS 中的空值?【英文标题】:Why expression of Derived Column component don't working with empty value in SSIS?为什么派生列组件的表达式不适用于 SSIS 中的空值? 【发布时间】:2020-02-11 04:38:03 【问题描述】:有人可以给我建议吗?
我在 SQL Server 中有表
create table t_test_date
(
tcol_date date,
tcol_varchar varchar(20),
tcol_date1 date
)
当我尝试从包含内容的平面文件中插入数据时
COL_DATE
20-DEC-33
20-NOV-33
10-MAY-28
10-NOV-21
10-MAY-17
11-MAY-17
--(To Allow has empty values)
Derived Column 组件的表达式值为:
COL_DATE == "" || ISNULL(COL_DATE) ? NULL(DT_DBDATE) : (DT_DBDATE)COL_DATE
我收到错误:
[派生列 [17]] 错误:SSIS 错误代码 DTS_E_INDUCEDTRANSFORMFAILUREONERROR。 “派生列”失败,因为发生错误代码 0xC0049063,并且“派生列.输出 [派生列输出].列 [COL_DATE]”上的错误行处置指定错误失败。指定组件的指定对象发生错误。在此之前可能会发布错误消息,其中包含有关失败的更多信息。
【问题讨论】:
【参考方案1】:错误原因不是空值,而是日期格式。由于DD-MMM-YY
格式无法转换为DT_DBDATE
数据类型。
尝试将月份名称转换为月份编号并更改日期格式。例如,以下表达式将DD-MMM-YY
格式转换为YYYY-MM-DD
格式:
([COL_DATE] == "" || ISNULL([COL_DATE])) ? NULL(DT_DATE) :
(DT_DATE)("20" + RIGHT([COL_DATE],2) + "-" +
(SUBSTRING( [COL_DATE],4,3) == "JAN" ? "01" :
SUBSTRING( [COL_DATE],4,3) == "FEB" ? "02" :
SUBSTRING( [COL_DATE],4,3) == "MAR" ? "03" :
SUBSTRING( [COL_DATE],4,3) == "APR" ? "04" :
SUBSTRING( [COL_DATE],4,3) == "MAY" ? "05" :
SUBSTRING( [COL_DATE],4,3) == "JUN" ? "06" :
SUBSTRING( [COL_DATE],4,3) == "JUL" ? "07" :
SUBSTRING( [COL_DATE],4,3) == "AUG" ? "08" :
SUBSTRING( [COL_DATE],4,3) == "SEP" ? "09" :
SUBSTRING( [COL_DATE],4,3) == "OCT" ? "10" :
SUBSTRING( [COL_DATE],4,3) == "NOV" ? "11" :
SUBSTRING( [COL_DATE],4,3) == "DEC"? "12": "00")
+ "-" + LEFT([COL_DATE],2) )
参考文献
Convert month name to month number in SSIS【讨论】:
以上是关于为啥派生列组件的表达式不适用于 SSIS 中的空值?的主要内容,如果未能解决你的问题,请参考以下文章
为啥`return a or b`是Ruby中的空值表达式错误?
SQL SSIS 使用派生列转换来处理空数据.. 替代方案?