2017-06-13 150 views
1

运行下面的代码时,管理工作室会显示设置它的错误。批量插入不插入数据

我需要通过BULK INSERT插入简单的文本数据到表中。用于插入的代码如下:

BULK INSERT Pais FROM 'C:\[bulkdata]\shared\01-Pais.txt' 
WITH(MAXERRORS = 0, CODEPAGE = 'ACP', FIELDTERMINATOR = 'ø', ROWTERMINATOR = '\n', KEEPNULLS, 
ERRORFILE = 'C:\[bulkdata]\shared\teste.txt') 

文件我使用中测试该命令仅具有一个用于插入数据线, teste.txt:

BrasilØ01058 

返回的错误如下:

Msg 4832, Level 16, State 1, Line 1 
Bulk load: An unexpected end of file was encountered in the data file. 
Msg 7399, Level 16, State 1, Line 1 
The OLE DB provider "BULK" for linked server "(null)" reported an error. The provider did not give any information about the error. 
Msg 7330, Level 16, State 2, Line 1 
Cannot fetch a row from OLE DB provider "BULK" for linked server "(null)". 

teste.txt:

BrasilØ01058BrasilØ01058 

在我看来,这是试图在同一行插入两次值,但正如设置显示,它通常插入到其他项目。我的用户可以未经许可吗?我已经创建了具有所有权限的特定用户,并且还设置了服务器执行批量操作的权限。

teste.txt.Error.Txt:

Row 1 File Offset 0 ErrorFile Offset 0 - HRESULT 0x80004005 

enter image description here

+0

我要做的第一件事就是检查文件的格式是否像记事本++中显示隐藏字符一样的真实文件..听起来像它它寻找换行或回车或无论是在最后还是没有得到。 – HLGEM

+0

我只是做了一个简单的测试,似乎你正在使用javascript ....'var t1 ='ø'; var t2 ='Ø'; console.log(t1 === t2);'和结果是'false' – Hackerman

+0

我的意思是你的文件中的字段终止符和你的批量声明中指定的字段终止符不一样 – Hackerman

回答

2

这似乎是一个character问题,您可以用另一个像§尝试。 你只需要做一个小的调整:

FIELDTERMINATOR = '§' 

而且你01-Pais.txt文件:

Brasil§01058  

更新:似乎还数据库整理和文件编码问题的组合,能已经搞乱了bulk操作。将文件保存为ANSI而不是UTF-8似乎已更正原始问题。看来,也使用CODEPAGE=1252DATAFILETYPE = 'widechar'应该已经解决了这个问题。

+0

'行1列1(Id)的批量加载数据转换错误(类型不匹配或指定代码页的字符无效)。 链接服务器“(null)”的OLE DB提供程序“BULK”报告了错误。提供者没有提供任何关于错误的信息。 无法从链接服务器的OLE DB提供程序“BULK”中获取一行“(null)”。 –

+0

现在要通过C#通过系统插入此错误。我正在使用实体框架来生成Seed。 –

+0

我发现了所有这些问题。包含数据的文件(例如我的bulkdata.txt)应该保存为ANSI而不是它所在的UTF-8,只需在记事本中打开它并以此格式保存,以便使用我尝试使用的第一个字符来解决问题。将此添加到您对其他人的回复中。 –