第1行第4列(年)的批量加载数据转换错误(类型不匹配或指定代码页的无效字符)

zoe*_*oe 18 sql t-sql sql-server

我尝试将文本文件导入数据库时​​收到转换错误.以下是我收到的错误消息:

第1行第4列(年)的批量加载数据转换错误(类型不匹配或指定代码页的无效字符).

这是我的查询代码:

CREATE TABLE Students
(
    StudentNo    Integer NOT NULL Primary Key,
    FirstName    VARCHAR(40) NOT NULL,
    LastName     VARCHAR(40) NOT NULL,
    Year         Integer,
    GPA          Float NULL
);
Run Code Online (Sandbox Code Playgroud)

以下是来自文本文件的示例数据:

100,Christoph,Van Gerwen,2011
101,Anar,Cooke,2011
102,Douglis,Rudinow,2008
Run Code Online (Sandbox Code Playgroud)

我想我知道问题是什么..下面是我的批量插入代码:

use xta9354
bulk insert xta9354.dbo.Students
from 'd:\userdata\xta9_Students.txt' 
with (fieldterminator = ',',rowterminator = '\n') 
Run Code Online (Sandbox Code Playgroud)

对于样本数据,在Year属性之后没有',',即使在年之后还有另一个属性Grade,它是NULL

有人可以告诉我如何解决这个问题吗?

Ker*_*mit 20

尝试使用格式文件,因为您的数据文件只有4列.否则,请尝试OPENROWSET或使用临时表.

myTestFormatFiles.Fmt 可能看起来像:

9.0
4
1       SQLINT        0       3       ","      1     StudentNo      ""
2       SQLCHAR       0       100     ","      2     FirstName      SQL_Latin1_General_CP1_CI_AS
3       SQLCHAR       0       100     ","      3     LastName       SQL_Latin1_General_CP1_CI_AS
4       SQLINT        0       4       "\r\n"   4     Year           "

http://i.msdn.microsoft.com/dynimg/IC45684.gif

有关跳过列的本教程BULK INSERT也可能有所帮助.

您的陈述如下:

USE xta9354
GO
BULK INSERT xta9354.dbo.Students
    FROM 'd:\userdata\xta9_Students.txt' 
    WITH (FORMATFILE = 'C:\myTestFormatFiles.Fmt')
Run Code Online (Sandbox Code Playgroud)


Rog*_*ger 8

就我而言,我正在处理一个由linux盒子上的hadoop生成的文件.当我尝试导入到SQL时,我遇到了这个问题.最后修复是使用十六进制值'换行'0x0a.它也适用于批量插入

bulk insert table from 'file' 
WITH (FIELDTERMINATOR = ',', ROWTERMINATOR = '0x0a')
Run Code Online (Sandbox Code Playgroud)

  • 由于某种原因,“\n”的终止符对我来说失败了,但“0x0a”工作正常。可能与 Unicode 或代码页相关 (2认同)