我想从tsv(选项卡分隔值)文件导入数据到一个表使用SQL Server和Visual Studio,我遇到一个错误,我似乎无法固定。我能够重新创建我的数据库的一个小例子,并模仿我遇到的问题。SQL Server批量插入类型不匹配错误从csv
我创建了一个新的表在我的数据库从.sql文件以下属性:
CREATE TABLE [dbo].[TestTable]
(
[Id] INT NOT NULL PRIMARY KEY IDENTITY(1,1),
[variable1] INT NULL,
[variable2] INT NULL,
[variable3] INT NULL
)
我想的ID是自动生成的,每当行添加到表中。对于我的部署后脚本我读的TSV文件:
BULK INSERT TestTable
FROM 'C:\Users\me\Documents\projects\testData.txt'
WITH
(
FIELDTERMINATOR = '\t', --CSV field delimiter
ROWTERMINATOR = '\n', --Use to shift the control to next row
ERRORFILE = 'C:\Users\me\Documents\projects\testDataError.txt'
)
这是由制表符分隔我的数据文件:
11 11 11
22 22 22
33 33 33
而且最后我得到的错误:
消息4864,级别16,状态1,行12
第1行第3列(变量2)的批量加载数据转换错误(指定代码页的类型不匹配或无效字符)。消息4832,级别16,状态1,行12
批量加载:在数据文件中遇到意外的文件结尾。Msg 7399,Level 16,State 1,Line 12
链接服务器“(null)”的OLE DB提供程序“BULK”报告了错误。提供者没有提供任何关于错误的信息。Msg 7330,Level 16,State 2,Line 12
无法从链接服务器“(空)”的OLE DB提供程序“BULK”中获取一行。
我最关心的第一个错误,任何其他错误的意见,以及将不胜感激。谢谢!
编辑:Hex文件添加hex info for data file
错误文件打印到testDataError.txt
11 11 11
22 22 22
33 33 33
33 33 33
编辑:第二个十六进制文件添加用于数据文件 Second Hex Dump
很难说肯定,但我敢打赌,你的输入文件有两个值之间的意想不到的字符。对于此输入,两列之间的所有SQL期望都是一个选项卡。我会使用十六进制编辑器并查看该文件。您还应该确保该行仅以换行符(\ n)结尾,因为\ r \ n是Windows标准。 –
我找到了一个在线十六进制文件编辑器,并在该问题中附加了一个链接。数据值之间的右列中的点是否代表文件中的字符? – ans
该文件甚至不符合您的规范。查看http://www.asciitable.com了解这些值。 –