2

我有一个使用 SSIS 包导入 SQL Server 2008 的平面文件。

该文件包含一个带数字的字段,当前一列值为负时,后跟一个带负号的列。

例如:

Price    Sign
-----    -----
9212.00 
  29.01    -
 268.00    -
 453.02

我想将此值加载到表格的十进制列中。

为了实现这一点,我在我的数据流任务中创建了一个派生列。派生列的表达式是[Sign] + [Price]。我已经(使用高级编辑器)将派生列定义为类型 decimal [DT_DECIMAL]

然后我只是将数据(连同派生列)加载到我的表中。

这听起来像是处理这种情况的好方法吗?我应该考虑另一种方法吗?使用这种方法有什么“陷阱”吗?

谢谢。

4

2 回答 2

2

你的方法似乎是最好的选择。平面文件中每一列的默认数据类型是字符串。因此,您的[Sign] + [Price]表达式正在执行字符串连接。而且,当移动到输出列时,数据会隐式转换为十进制值。

一项可以提高可读性的更改是将字符串值显式转换为小数。您可以将派生列组件中的表达式更改为:

(DT_DECIMAL, scale)[Sign] + [Price]

wherescale是一个与输出列的数据类型匹配的数字。

通过此更改,派生列组件的输出将是十进制数据类型。

于 2013-01-07T14:53:08.327 回答
1

也许这行不通...

  1. 您需要转换Sign为字符串数据类型和Price数字。
  2. 然后比较 if Signis "-", if is, multiple from -1

派生列代码示例:

(DT_WSTR, 1) [Sign]=="-"?  [Price]*-1 :  [Price]

在此处输入图像描述

于 2013-01-04T20:22:13.973 回答