Select 查询截断大于 10 位的数字数据

Select query truncates numeric data greater than 10 digits

几天来我一直在努力寻找解决方案,但没有成功。非常感谢任何帮助

我正在尝试将一个 csv 文件导入到 Access 数据库中,但是数字列中的一些数据得到了 t运行 分类。

我的机器上没有安装 MS Access(只有 windows 预装的 jet 数据库引擎 (msjet40.dll and msjetoledb40.dll))。但除此问题外,其他一切正常。我在连接字符串中使用 Provider=Microsoft.ACE.OLEDB.12.0

csv 文件包含文件中的数字列和非数字列。只要有问题的数字列的值小于 2140649050 左右,它 select 没问题。

SELECT * into ds1 FROM [Text;FMT=Delimited;HDR=YES;DATABASE=" & LFPath & "].[" & LFName & "]

最初我假设数据的 t运行 阳离子发生在将数据加载到 table 时。但是数据在 select 本身的时间得到 t运行。以下 select 查询 returns 部分数据 t运行 cated for the UPC column

SELECT HeadName,[upc code],len([upc code]) as maxlen  FROM [Text;FMT=Delimited;HDR=YES;DATABASE=" & LFPath & "].[" & LFName & "]

这是相同的输出

HeadName    upc code    maxlen
TOTAL U.S   2140649030  10
TOTAL U.S   2140649050  10
TOTAL U.S   2140649050  10
TOTAL U.S       
TOTAL U.S       
TOTAL U.S       
TOTAL U.S       
TOTAL U.S       

似乎它根据最初的几条记录设置了列的最大长度。我怎样才能阻止它这样做。

选择访问是因为在 windows 中 运行 该工具不需要额外的设置。

安装 MS Access 后,数据未被 运行 分类(已使用 Access 2010 测试)。这是否意味着 ACE.OLEDB.12 与最新的 ACE 引擎 ACECORE.dll (wiki)

配合使用效果更好

请提出解决问题的任何可能性,而无需安装其他版本的数据库的额外负载

您可以尝试将单元格格式化为常规格式吗?那么您的数据可能不会被截断。

据我所知和研究,我发现了 2 个我们可以选择的选项。两者都涉及一个额外的步骤。

第一个选项是 按列 的降序对 csv 文件进行排序。在我的例子中,只有一列被截断了。所以我可以根据特定列按降序对列表进行排序,并且数据会在不截断的情况下插入。 (找不到以编程方式对文件进行排序的自动化解决方案。因此我们需要手动对文件进行排序,然后加载到数据库)

另一种选择是将 csv 文件转换为 excel 文件 并使用它来加载数据。这是相同的