【问题标题】:SSIS package with flat file source causing overflow error带有平面文件源的 SSIS 包导致溢出错误
【发布时间】:2013-03-05 13:31:54
【问题描述】:

我有一个 SSIS 包,它从具有以下格式的纯文本文件中读取:

"Col1";"Col2";"Col3";"Col4";"Col5"
2012-06-18 00:00:00;0001;"99";"311";"0001"
2012-06-18 00:00:00;0002;"99";"311";"0002"
2012-06-18 00:00:00;0003;"99";"311";"0003"
2012-06-18 00:00:00;0004;"99";"311";"0004"
2012-06-18 00:00:00;0005;"99";"311";"0005"
2012-06-18 00:00:00;0006;"99";"311";"0006"
2012-06-18 00:00:00;0007;"99";"311";"0007"
2012-06-18 00:00:00;0008;"99";"311";"0008"
2012-06-18 00:00:00;0009;"99";"311";"0009"
2012-06-18 00:00:00;0010;"99";"311";"0010"

并将数据插入到具有相同列的数据库表中。在数据库中,Col2 定义为 DECIMAL(5,4)。该包执行 9 行,然后引发错误。当我检查插入数据库的数据时,前 9 行中 Col2 的值是 1.0000、2.0000、3.0000、...直到 9.0000。在第 10 行尝试插入 10000 并导致溢出错误。

我不知道为什么这些值要乘以一千,我当然不希望这种行为。谁能帮帮我?

【问题讨论】:

  • 数据库中的值是1000、2000、3000,还是1.0000、2.0000、3.0000?
  • 对不起,它们是 1.0000、2.0000、3.0000。我要编辑问题。

标签: sql-server ssis


【解决方案1】:

在此处查看有关DECIMAL 数据类型的 SQL 文档:

http://msdn.microsoft.com/en-us/library/ms187746.aspx

社区添加的第一个描述了您的方案,因为您使用的是 (5, 4),所以小数点左侧只能有一个数字。您的最大精度为 5,其中 4 个在小数点右侧,仅在右侧留下一个位置。从而导致你的溢出

【讨论】:

  • 所以,我可以将数据库列更改为 DECIMAL(8,4) 或类似的值,或者将输入文件的值更改为 0.0001 到 9.9999,对吧?你能想到任何替代解决方案吗?
  • 您可以将其更改为字符串或整数,我不确定您为什么首先将这些值填充为小数
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多