SSIS派生列转换转换错误

时间:2018-10-24 09:32:48

标签: sql-server ssis casting divide-by-zero

我有一个.txt文件作为源,文件视图的一部分在下面(所有价格列都以DT_R4开头)

Quantity    Partner Share   Customer Price
1           0               0
1           0               0
3           0.7             0.99
2           1.4             1.99
1          -1.4            -1.99

问题是我正在使用派生列基于这些价格列创建一个新列Discount,并且由于某些原因,当价格为0时,它不起作用。派生列转换下方:

(DT_NUMERIC,18,2)((ABS([Customer Price]) - [Partner Share]) / ABS([Customer Price]) * 100)

如果我忽略价格为0的行,那么一切正常,但我也需要这些:(

我猜测可能是因为表达式将为0/0,但我不知道如何解决。

以下是错误:

  

[派生列[297]]错误:尝试执行以下操作时发生错误   执行类型转换。

     

[派生列[297]]错误:SSIS错误代码   DTS_E_INDUCEDTRANSFORMFAILUREONERROR。 “组件“派生列”   (297)”失败,因为发生了错误代码0xC0049064,并且该错误   “输出列“折扣”(376)”上的行配置指定失败   错误。指定对象的指定对象发生错误   零件。在此之前可能会发布错误消息,并提供更多信息   有关失败的信息。

     

[SSIS.Pipeline]错误:SSIS错误代码   DTS_E_PROCESSINPUTFAILED。组件上的ProcessInput方法   “派生列”(297)失败,错误代码为0xC0209029   处理输入“派生列输入”(298)。确定的   组件从ProcessInput方法返回错误。错误是   特定于组件,但错误是致命的,将导致   数据流任务停止运行。可能发布了错误消息   在此之前,有关失败的更多信息。

感谢您的帮助,谢谢!

2 个答案:

答案 0 :(得分:2)

您可以尝试在12.34 的表达式中使用Conditional Operator,如下所示。

Derived Column

希望它对您有用。

答案 1 :(得分:0)

尝试使用TRY_CAST运算符,如果使用0,请使用ISNULL

(DT_NUMERIC,18,2)((ABS( ISNULL(TRY_CAST([Customer Price] AS int), 0)) - [Partner Share]) 
     / ABS( ISNULL(TRY_CAST([Customer Price] AS int), 1)) * 100)

看起来有些字符串无法转换为整数。在数据流中添加一些错误处理,并将错误行路由到平面文件,以便您可以检查它们。