【发布时间】:2019-11-22 17:05:49
【问题描述】:
我正在尝试将包含字母数字列的 CSV 文件导入到 MS SQL 表中的 VARCHAR 列中,并且遇到了数据有时会以科学记数法格式重写的问题。仅当 CSV 字符串格式类似于科学记数法时才会出现这种情况。
EX:CSV 字符串“3344E133”在 SQL 表中被导入为“3.344E+136”。
仅当 CSV 字符串以数字开头、唯一的字母为“E”且以数字结尾时才会发生这种情况。其他字符串正在导入而不被重写(例如:CSV 字符串“50524676”和“2D8FDD0C”被导入为“50524676”和“2D8FDD0C”)。
我已确认 CSV 文件中的列是文本,并且它被导入到 VARCHAR(50) SQL 列中。我正在使用平面文件源连接管理器进行导入。
关于为什么会发生这种情况或我可以做些什么来解决任何想法?
【问题讨论】:
-
听起来你已经将 SSIS 中列的数据类型设置为浮点数;或允许连接管理器做出决定,而不是您告诉它是
DT_STR。 SSIS 不会更改数据类型,因为它“感觉像”。 SSIS 甚至不会将DT_STR隐式转换为DT_WSTR,更不用说将 a 转换为浮点值了。 -
在高级下的平面文件连接管理器编辑器中,列设置为数据类型:字符串 [DT_STR],OutputColumnWidth 为 50。
-
那么您在哪里看到
3.344E+136的值? SSIS 肯定不会这样做,而且 CSV 不能是文本以外的任何其他内容;这是一个 CSV。 -
呃...原来这是一个 Excel 问题。使用 Excel 打开 csv,将字符串转换为科学记数法,然后重新保存,因此 csv 将转换保留为文本。当我使用干净的 csv 重新运行导入时,一切正常 - 我会将其标记为已回答,为误导性问题道歉
-
Excel 可能是一个糟糕的产品的众多原因之一。这太“聪明”(愚蠢)了。
标签: sql-server csv ssis