【问题标题】:SSIS - Vertical bar vs comma delimitedSSIS - 竖线与逗号分隔
【发布时间】:2018-07-25 08:26:23
【问题描述】:

我的 SSIS 包有一个小问题。我正在导入一个平面文件。其中一个字段带有十进制值,即 32.76。它被映射到一个 int 数据类型列。奇怪的是,如果输入的平面文件是逗号分隔的,它会很好地导入,尽管值的小数部分被截断。但是如果平面文件是竖线分隔的(|),那么SSIS包会抛出一个错误,表明输入类型是字符串,不能转换为int类型。这是可以理解的,尽管我不确定为什么逗号分隔会截断,而竖线分隔会引发致命错误。这是两者之间的唯一区别。

将列从 int 更改为 decimal 可以解决问题吗?我不愿意这样做。

谢谢

【问题讨论】:

  • 您应该将列类型更改为十进制,因为这是您获取的数据。如果您想在数据流中对其进行四舍五入,那是您的特权。

标签: sql-server ssis etl delimiter flat-file


【解决方案1】:

逗号与竖线

如果某些字段值包含分隔符,则会导致将其视为两个字段,要解决此问题,您必须更改分隔符或在列中添加文本限定符。

文本限定符 = 包含文本字段的字符

阅读更多Flat File Connection Manager

如何转换成整数

我不确定源上是否对十进制值进行了四舍五入,所以如果字段包含十进制值,那么您必须将类型更改为十进制或将其保留为字符串类型并添加派生列转换或数据转换将其转换为整数的转换(我更喜欢使用第二种方法)。

【讨论】:

  • 工作感谢。仍然不确定为什么它的行为不同,逗号分隔,竖线分隔,但不管怎样都行。逗号分隔的格式会自行进行转换,而竖线分隔的格式需要您提到的特定转换。
  • @Scott 乐于助人 :) 如果它解决了问题,您还必须接受或支持这个答案
猜你喜欢
  • 2020-08-25
  • 1970-01-01
  • 2019-08-08
  • 1970-01-01
  • 1970-01-01
  • 2023-03-05
  • 2019-08-19
  • 1970-01-01
  • 2013-06-22
相关资源
最近更新 更多