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

2019-07-02 13:19发布

我得到的转换错误,当我尝试导入文本文件到我的数据库。 下面是我收到的错误信息:

批量加载数据转换错误在行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
);

下面是从文本文件中的样本数据:

100,Christoph,Van Gerwen,2011
101,Anar,Cooke,2011
102,Douglis,Rudinow,2008

我想我知道问题is..Below是我的批量插入的代码:

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

随着样本数据,也没有“”后年属性甚至尽管还有另一个属性年前后级是NULL

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

Answer 1:

尝试使用格式文件 ,因为你的数据文件只有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')


Answer 2:

就我而言,我正在处理,是由Hadoop的生成在Linux中的文件。 当我试图导入到SQL我有这个问题。 的修复卷绕法是使用关于“线进料” 0X0A十六进制值。 它也曾为批量插入

bulk insert table from 'file' 
WITH (FIELDTERMINATOR = ',', ROWTERMINATOR = '0x0a')


Answer 3:

我们使用批量插入为好。 我们上传的文件是从外部方发送。 一段时间后故障排除,我意识到,他们的文件已经在它逗号列。 只是另一件事是寻找...



Answer 4:

上述选项适用于谷歌大查询文件也。 我导出的表中的数据goodle云存储,并从那里下载。 在加载相同的到SQL Server正面临着这一问题,并指定行分隔符为后能够成功地加载文件

ROWTERMINATOR = '0x0a' 

注意头记录以及与指定

FIRSTROW = 2

我从谷歌的BigQuery数据文件导出最终块看起来是这样的。

BULK INSERT TABLENAME
        FROM 'C:\ETL\Data\BigQuery\In\FILENAME.csv'
        WITH
        (
         FIRSTROW = 2,
         FIELDTERMINATOR = ',',  --CSV field delimiter
         ROWTERMINATOR = '0x0a',--Files are generated with this row terminator in Google Bigquery
         TABLOCK
        )


Answer 5:

新增MSSQLSERVER完全访问的文件夹,diskadmin和bulkadmin服务器角色。

在我的C#应用​​程序,用于批量插入命令做准备时,

string strsql = "BULK INSERT PWCR_Contractor_vw_TEST FROM '" + strFileName + "' WITH (FIELDTERMINATOR = ',', ROWTERMINATOR = '\\n')";

和我得到这个错误 - 批量负载数据转换错误(类型不匹配或无效字符为指定的代码页)为第1行,第8栏(STATUS)。

我看了看我的日志,发现终结者变成“”而不是“\ n”。 OLE DB提供程序“BULK”链接服务器“(空)”报告错误。 提供程序未给出有关错误的任何信息:

Cannot fetch a row from OLE DB provider "BULK" for linked server "(null)". Query :BULK INSERT PWCR_Contractor_vw_TEST FROM 'G:\NEWSTAGEWWW\CalAtlasToPWCR\Results\parsedRegistration.csv' WITH (FIELDTERMINATOR = ',', **ROWTERMINATOR = ''**)

因此,我增加额外逃到ROWTERMINATOR -字符串STRSQL = “BULK INSERT PWCR_Contractor_vw_TEST FROM“” + strFileName +“ 'WITH(FIELDTERMINATOR =',',ROWTERMINATOR = '\\ N')“;

而现在,它成功地插入。

Bulk Insert SQL -   --->  BULK INSERT PWCR_Contractor_vw_TEST FROM 'G:\\NEWSTAGEWWW\\CalAtlasToPWCR\\Results\\parsedRegistration.csv' WITH (FIELDTERMINATOR = ',', ROWTERMINATOR = '\n')
Bulk Insert to PWCR_Contractor_vw_TEST successful...  --->  clsDatase.PerformBulkInsert


文章来源: Bulk load data conversion error (type mismatch or invalid character for the specified codepage) for row 1, column 4 (Year)