我在数据库中有一个nchar(10)字段,我尝试在SSIS包中转换为int。
该字段包含3个不同的值:空字符串(SSMS中的len(field)
返回0)和两个数字。在SSIS中,我在此字段中添加了以下表达式:
LEN(field) > 0 ? (DT_I4)field : (DT_I4)0
然而," DTS_E_EXPREVALSTATIC_COMPUTATIONFAILED" (-1073442796)错误,但仅适用于包含空字符串的行。为了消除这个问题,我使用了
LEN(TRIM(field)) > 0 ? (DT_I4)field : (DT_I4)0
这有效,但为什么会这样呢?当SQL Server中的len显示为0时,为什么会失败?这是nchar / DT_WSTR的一些问题吗?
答案 0 :(得分:4)
我认为MS SQL中的LEN()
和SSIS中的LEN()
行为不同。
LEN(SSIS表达): 返回字符表达式中的字符数。如果字符串包含前导和尾随空白,则函数在计数中包含。
LEN(Transact-SQL): 返回指定字符串表达式的字符数,不包括尾随空白。
Ref:
http://technet.microsoft.com/en-us/library/ms141797.aspx
http://technet.microsoft.com/en-us/library/ms190329%28v=sql.110%29.aspx