You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL Server 2008 R2 OPENROWSET读取CSV时数值自动转为int的问题

解决OPENROWSET读取CSV时自动截断小数的问题

这问题我之前碰过好多次,ACE OLEDB驱动的类型推断逻辑确实有点“自作聪明”——它默认会通过采样列内数据来判断字段类型:如果采样到的整数占比过高(比如你30行里超过25行是整数),就会把整个列判定为int类型,导致少数小数被直接截断成整数,比如5.654变成5,0.25475变成0。

下面给你几个靠谱的解决方案,按推荐程度排序:

方法一:用Schema.ini强制指定列类型(最稳定)

这是最可靠的方案,不受驱动默认采样逻辑影响,而且只针对当前CSV生效。

  1. 在你的CSV文件所在文件夹(也就是C:\Users\rtdev1\Desktop\)里新建一个名为Schema.ini的文本文件。
  2. 在文件里写入以下内容(根据你的CSV调整):
[Test.csv]
ColNameHeader=True
Format=Delimited(,)
Column1=ColumnA Double
  • [Test.csv]:指定要配置的CSV文件名
  • ColNameHeader=True:对应你代码里的HDR=yes,表示第一行是表头
  • Format=Delimited(,):说明CSV用逗号分隔
  • Column1=ColumnA Double:把第一列(对应表头的ColumnA)强制设为双精度浮点类型,如果你需要更精确的小数,可以改成Decimal(10,5)(10位总长度,5位小数)
  1. 不用修改你原来的代码,直接重新执行exec(@str),就能正确读取所有小数了。

方法二:修改注册表调整驱动采样行数(全局生效)

如果不想每个CSV都写Schema.ini,可以修改ACE驱动的采样规则,让它扫描全量数据来推断类型:

  1. 打开注册表编辑器(Win+R输入regedit),根据你的系统位数找到对应路径:
    • 32位系统:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Jet\4.0\Engines\Text
    • 64位系统:HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Jet\4.0\Engines\Text
  2. 找到名为TypeGuessRows的键值,默认是8(表示采样前8行),把它改成0(表示扫描整个文件的所有行来推断类型)。
  3. 重启SQL Server服务,让设置生效。

⚠️ 注意:这是全局设置,会影响所有用ACE驱动读取文本文件的操作,如果你有其他CSV需要按默认规则推断类型,可能会有影响。

方法三:改用BULK INSERT配合格式文件(备选)

如果上述方法都不适用,也可以用BULK INSERT替代OPENROWSET,并通过格式文件指定列类型:

  1. 创建一个格式文件(比如Test.fmt),内容如下:
<?xml version="1.0"?>
<BCPFORMAT xmlns="http://schemas.microsoft.com/sqlserver/2004/bulkload/format" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
 <RECORD>
  <FIELD ID="1" xsi:type="CharTerm" TERMINATOR="," MAX_LENGTH="50"/>
 </RECORD>
 <ROW>
  <COLUMN SOURCE="1" NAME="ColumnA" xsi:type="SQL_FLOAT"/>
 </ROW>
</BCPFORMAT>
  1. 先创建临时表接收数据,再执行BULK INSERT命令:
CREATE TABLE #TempTable (ColumnA FLOAT);

BULK INSERT #TempTable
FROM 'C:\Users\rtdev1\Desktop\Test.csv'
WITH (
    FORMATFILE = 'C:\Users\rtdev1\Desktop\Test.fmt',
    FIRSTROW = 2 -- 跳过表头行
);

SELECT * FROM #TempTable;
DROP TABLE #TempTable;

这个方法步骤稍多,但灵活性更高,适合复杂的数据格式场景。

内容的提问来源于stack exchange,提问作者rAm

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 06:45:02