批量加载数据转换错误 - 找不到答案



由于某种原因,我在尝试将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:pathwayfile.csv'
WITH
(
    FIELDTERMINATOR = ',',
    ROWTERMINATOR = 'n',
    FIRSTROW = 2
);

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

您的数据中可能存在错误。也就是说,存在无法显式转换为 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(( 查找无法转换的错误。

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

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

我现在正在为这个问题而苦苦挣扎。问题是我有一个 68 列的报告,我正在尝试导入。

第 17 列是"说明"列,在逗号分隔符的顶部有一个双引号文本限定符。

使用逗号字段终止符进行批量插入不会标识双引号文本限定符,也不会在违规列的右侧修改所有数据。

看起来要克服这个问题,您需要创建一个 .fmt 文件来指示批量插入需要将哪些列视为简单分隔,以及哪些列需要被视为分隔和限定(请参阅此答案(。

相关内容

最新更新