在SSIS中使用ReplaceNULL函数时抛出异常

时间:2014-02-28 10:10:55

标签: mysql sql sql-server ssis

在进行条件分割时,我们从SSIS包中收到以下两个错误:

  

错误:SSIS错误代码DTS_E_INDUCEDTRANSFORMFAILUREONERROR   “查找更新的记录”失败,因为发生错误代码0xC0049067,并且“查找更新的记录。输出[相同记录]”上的错误行处置指定错误时失败。

     

[SSIS.Pipeline]错误:SSIS错误代码DTS_E_PROCESSINPUTFAILED。   组件“查找更新的记录”(76)上的ProcessInput方法在处理输入“条件分割输入”(77)时失败,错误代码为0xC0209029。标识的组件从ProcessInput方法返回错误。该错误是特定于组件的,但错误是致命的,并且会导致数据流任务停止运行。

在解决此问题时,我发现条件拆分条件中的以下代码实际上是导致错误:

 (REPLACENULL(T1_from,"") == REPLACENULL(T2_from,"")) &&  (REPLACENULL(T2_to,"") == REPLACENULL(T2_to,"")) 

列的类型如下:

  • T1_from
    • 类型:日期时间
    • 数据库类型:mySQL
    • Nullable:是
  • T1_to
    • 类型:日期时间
    • 数据库类型:mySQL
    • Nullable:是
  • T2_from
    • 类型:日期
    • 数据库类型:MS SQL
    • Nullable:是
  • T2_to
    • 类型:日期
    • 数据库类型:MS SQL
    • Nullable:是

在检查数据时,我们的数据看起来像是:

  • T1_from:2008-05-01 00:00:00.000
  • T1_to:NULL
  • T2_from:5/1/2008
  • T2_to:NULL

我强烈怀疑在REPLACENULL函数中从T1转换DateTime mySQL类型时会引发异常,但我无法弄清楚如何直接使用它。

1 个答案:

答案 0 :(得分:1)

您可以尝试使用有效日期替换空值,以避免比较字符串与日期,如下所示:

(REPLACENULL(T1_from, (DT_DBTIMESTAMP)"1800-01-01") == REPLACENULL(T2_from,  (DT_DBTIMESTAMP)"1800-01-01")) &&  (REPLACENULL(T2_to, (DT_DBTIMESTAMP)"1800-01-01") == REPLACENULL(T2_to, (DT_DBTIMESTAMP)"1800-01-01"))