【问题标题】:Bulk Load Data Conversion Error - Can't Find Answer批量加载数据转换错误 - 找不到答案
【发布时间】:2017-08-09 07:22:06
【问题描述】:

由于某种原因,我在尝试将 CSV 文件批量插入 SQL Express 时不断收到以下错误:

Bulk load data conversion error (type mismatch or invalid character for the 
specified codepage) for row 2, column 75 (Delta_SM_RR).
Msg 4864, Level 16, State 1, Line 89
Bulk load data conversion error (type mismatch or invalid character for the     
specified codepage) for row 3, column 75 (Delta_SM_RR).
Msg 4864, Level 16, State 1, Line 89
Bulk load data conversion error (type mismatch or invalid character for the   
specified codepage) for row 4, column 75 (Delta_SM_RR).
... etc.

我一直试图将此列插入为十进制和数字,并不断收到相同的错误(如果我取出此列,后续列会出现相同的错误)。

数据示例见下图,该栏内所有数据点均包含小数,且均在小数点后第三位四舍五入:

Delta_SM_RR
168.64
146.17
95.07
79.85
60.52
61.03
-4.11
-59.57
1563.09
354.36
114.78
253.46
451.5

任何形式的帮助或建议都将不胜感激,因为似乎 SO 的许多人都遇到了这个问题。此外,如果有人知道另一种将 CSV 加载到 SSMS 中的自动方法,那也会有很大帮助。

编辑:

Create Table Example_Table

(
  [Col_1] varchar(255),
  [Col_2] numeric(10,5),
  [Col_3] numeric(10,5),
  [Col_4] numeric(10,5),
  [Col_5] date,
  [Delta_SM_RR] numeric(10,5),
                              )

GO

BULK INSERT
Example_Table
FROM 'C:\pathway\file.csv'
WITH

(
    FIELDTERMINATOR = ',',
    ROWTERMINATOR = '\n',
    FIRSTROW = 2
);

表架构 - 这是一个独立的表(进一步的计算和额外的表是基于这个单一的表构建的,但是在批量插入时它是唯一的表)

【问题讨论】:

  • 表架构是什么样的? “destination”列的数据类型是什么?
  • 包括您的表架构、您正在使用的批量插入命令、源文件的编码和格式文件(如果您正在使用的话)。另外,你用的是哪个版本的sql server?
  • 感谢两位的回答。我在上面进行了编辑以回答您的两个问题。另外,我正在使用 SQL Express 2012
  • 您是否尝试过使用格式文件? (FMT 或 XML)。或者尝试使用 0x0a 添加行终止符
  • 我也会检查您数据中的科学记数法

标签: sql-server tsql csv ssms bulk-load


【解决方案1】:

您的数据很可能有错误。也就是说,存在无法显式转换为NUMERICDECIMAL 的字符或值。检查并修复它的一种方法是

  1. [Delta_SM_RR] numeric(10,5) 更改为[Delta_SM_RR] nvarchar(256)
  2. 运行批量插入
  3. 查找错误行:select * from Example_Table where [Delta_SM_RR] like '%[^-.0-9]%'
  4. 在源头修复数据,或delete from Example_Table where [Delta_SM_RR] like '%[^-.0-9]%'

最后一个语句返回/删除除数字、句点或连字符之外的行。

对于您的日期列,您可以遵循上述相同的逻辑,将列更改为VARCHAR,然后使用ISDATE() 查找无法转换的错误。

【讨论】:

    【解决方案2】:

    我敢打赌,你的数据集中肯定有一些奇怪的字符。在 Notepad++ 中打开您的数据集并查看数据。任何异常都应该很快变得明显!问题来自 Col75,它影响了前几行,因此之后的所有内容也无法加载。

    【讨论】:

      【解决方案3】:

      确保 .csv 没有使用文本限定符,并且 .csv 中的所有字段都没有在所需值内包含逗号。

      我现在正在努力解决这个问题。问题是我正在尝试导入一份 68 列的报告。

      第 17 列是“描述”列,在逗号分隔符的顶部有一个双引号文本限定符。

      带有逗号字段终止符的批量插入不会识别双引号文本限定符,并将所有数据都放在有问题的列的右侧。

      看起来要克服这个问题,您需要创建一个 .fmt 文件来指示批量插入它需要将哪些列视为简单分隔,以及需要将哪些列视为分隔和限定 (see this answer)。

      【讨论】:

        猜你喜欢
        • 2011-11-23
        • 2012-10-26
        • 2013-02-16
        • 1970-01-01
        • 2015-09-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多