SSIS ISNULL为空字符串

时间:2011-01-14 17:08:36

标签: ssis data-migration advantage-database-server

所以我目前正在使用SSIS 2008从旧的Advantage数据库服务器迁移到SQL 2005.旧的Advantage数据库中的一个列是MEMO类型。默认情况下,这会转换为DT_TEXT列。好吧,在新数据库中,我不需要这么大的字段,但可以将其限制为诸如VARCHAR(50)之类的东西。我成功设置了一个派生列转换,使用以下表达式对其进行转换:

(DT_STR,50,1252)[ColumnName]

现在我想更进一步,用空字符串替换所有NULL值。使用ISNULL([ColumnName])?"":(DT_STR,50,1252)[ColumnName]表达式似乎很容易,但问题是OLE DB目标包含以下错误

  

无法在unicode和非unicode字符串之间进行转换......

显然,整个ISNULL表达式将数据类型转换为Unicode字符串[DT-WSTR]。我在整个表达式或不同部分尝试了各种演员表,但我无法获得与我需要的数据类型匹配的数据类型。

首先,是否可以将DT_TEXT类型直接转换为unicode?据我所知,演员阵容不会这样。如果没有,有没有办法让表达式工作,以便将NULL值转换为空字符串?

感谢您的帮助!

2 个答案:

答案 0 :(得分:2)

在派生列中试一试。

(DT_STR,50,1252) (ISNULL(ColumnName) ? "" : (DT_STR,50,1252) ColumnName)

它包括一个额外的类型转换,括号中的条件(?:)用于确保所需的处理顺序。我认为你的原始表达式是隐式地转换为DT_WSTR,因为“”默认为DT_WSTR。使用此新版本,在评估表达式后强制转换为DT_STR。

答案 1 :(得分:0)

我想出了一些有用的东西。它可能不是最好的解决方案,但它适用于我的情况。

从我的OLE DB源代码中,我首先做了一个派生列。我使用了ISNULL,最终将其转换为DT_WSTR unicode类型。虽然我无法获得任何强制转换以使其恢复到所需类型,但我在派生列和OLE DB目标之间添加了数据转换转换。这将获取输入字符串并将其转换回DT_STR。这一切都让人觉得有点烦人,但是这个专栏并没有包含任何我应该担心的时髦信息,所以我想它会起作用。

感谢所有思考解决方案的人,如果你找到一些很棒的解决方法,我会更感兴趣。