【问题标题】:SSIS ISNULL to empty stringSSIS ISNULL 为空字符串
【发布时间】:2011-06-09 06:59:48
【问题描述】:

因此,我目前正在使用 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 值转换为空字符串?

感谢您的帮助!

【问题讨论】:

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


    【解决方案1】:

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

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

    感谢所有思考解决方案的人,如果您找到解决问题的好方法,我会非常感兴趣。

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

      • 我确实在我的许多铸造尝试中尝试过这个。我什至做到了这一点 (DT_STR,50,1252)(ISNULL(ColumnName)?(DT_STR,1,1252)"":(DT_STR,50,1252)ColumnName ... 仍然没有运气。我很感激这个想法,除非我的选角做错了,否则它最终不起作用
      猜你喜欢
      • 2017-02-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-11
      • 1970-01-01
      • 2014-11-12
      相关资源
      最近更新 更多