SSIS ISNULL 为空字符串

标签 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 目标包含以下错误

Cannot convert between unicode and non-unicode strings...

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

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

感谢您的帮助!

最佳答案

在您的派生列中尝试一下。

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

它包含一个额外的类型转换,并在括号中使用条件 (?:),以确保所需的处理顺序。我认为您的原始表达式隐式转换为 DT_WSTR,因为“”默认为 DT_WSTR。在这个新版本中,您可以在计算表达式后强制转换为 DT_STR。

关于SSIS ISNULL 为空字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4693800/

相关文章:

excel - 当平面文件中的列和行不匹配时,如何解决(使用)ETL

visual-studio-2005 - 是否可以使用 TFS 将特定文件扩展名设置为仅独占 checkout

entity-framework - EF后续迁移——用数据填充新表

permissions - Advantage 数据字典中自动创建的 ADSSYS 用户的作用是什么?

c# - 具有两个数据库的单个类

SSIS 控制流与数据流

c# - 使用 SSIS - 查询事件目录的来源

ruby-on-rails-4 - 导轨 4 : single-table inheritance and NOT using class name as "type"

mysql - 在 MySQL 数据库之间迁移和处理数据的更快方法

c# - DataAdapter 不需要打开数据库连接?