SQL Server导入导出向导导入CSV数值列出现类型错误如何解决
数据类型选择
首先numeric(19,4)完全可以覆盖你的业务场景,不需要调整类型:
numeric(19,4)的总位数为19位、小数位保留4位,对应整数位最大支持15位,你提到的最大值1260亿仅占12位整数位,且本身支持正负值存储,完全适配你给出的所有金额格式。
你多次更换类型仍报错的核心原因是第85954行对应字段存在不符合数值格式的异常内容,和类型精度无关。
排查与解决方案
- 快速定位异常行
不需要打开全量CSV文件,Windows环境直接用PowerShell提取指定行即可(PowerShell索引从0开始,所以85954行对应索引85953):Get-Content "C:\你的文件路径\MyFile.csv" | Select-Object -Index 85953
提取后即可查看对应字段的异常内容,常见异常包括不可见特殊字符、全角空格、多余的小数点/符号、空字符串、单元格内换行等。 - 全量导入后清洗(推荐)
先将目标表对应字段类型改为NVARCHAR(50),全量导入完成后用SQL做批量清洗,300万行数据的清洗效率远高于手动排查:- 筛选所有异常值:
SELECT * FROM 导入后的临时表 WHERE TRY_CAST(MyColumnName AS numeric(19,4)) IS NULL AND MyColumnName IS NOT NULL - 清洗异常值(可根据实际异常内容加替换逻辑,比如去掉换行、前后空格):
UPDATE 导入后的临时表 SET MyColumnName = TRY_CAST(REPLACE(REPLACE(TRIM(MyColumnName), CHAR(13), ''), CHAR(10), '') AS numeric(19,4)) - 清洗完成后修改字段类型为
numeric(19,4)即可。
- 筛选所有异常值:
- 导入向导容错配置
走导入/导出向导的「配置映射」步骤时,勾选「启用错误处理」,设置错误行输出到单独的文本文件,导入过程中所有异常行会被自动导出到该文件,不会导致整个导入任务中断,适合数据量较大的场景。 - Excel导出CSV的额外注意
如果你是用Excel生成的CSV文件,很容易出现单元格内换行、全角空格这类非打印字符,导出CSV前可以先对目标列做一次格式统一,去掉多余格式后再导出,能减少90%以上的导入异常。
内容的提问来源于stack exchange,提问作者nam
相关产品推荐
相关产品推荐

