来自csv的SQL Server批量插入类型不匹配错误

时间:2016-09-06 16:29:25

标签: sql-server visual-studio csv

我正在尝试使用SQL Server和Visual Studio将tsv(制表符分隔值)文件中的数据导入到表中,我遇到了一个我似乎无法解决的错误。我能够重新创建一个关于我的数据库的一个小例子,并模仿我遇到的问题。

我使用.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

最后我得到的错误:

  

Msg 4864,Level 16,State 1,Line 12
  第1行第3列(变量2)的批量加载数据转换错误(类型不匹配或指定代码页的无效字符)。

     

Msg 4832,Level 16,State 1,Line 12
  批量加载:数据文件中遇到意外的文件结尾。

     

Msg 7399,Level 16,State 1,Line 12
  OLE DB提供程序" BULK"对于链接服务器"(null)"报告错误。提供商没有提供有关错误的任何信息。

     

Msg 7330,Level 16,State 2,Line 12
  无法从OLE DB提供程序中获取行" BULK"对于链接服务器"(null)"。

我最关心的是第一个错误,对其他错误的任何建议也会非常感激。谢谢!

编辑:Hex文件添加了hex info for data file

ErrorFile打印到testDataError.txt

11  11  11
22  22  22
33  33  33
33  33  33

编辑:为数据文件添加的第二个hex文件 Second Hex Dump

1 个答案:

答案 0 :(得分:0)

由于您有4列(包括主键列),因此您必须提供所有四列的数据。因此,第一个是 IDENTITY 列,您可以为该列提供任何值,因为此列值不会被使用但会被省略。

在您的情况下,如果您提供类似的数据:

1   11  11  11
1   22  22  22
1   33  55  66

我检查过这个并发现它有效。如果您没有任何选项来更改csv文件,则可以创建没有标识列的临时表并执行批量插入操作。之后,您可以通过执行INSERT INTO命令将数据从登台移动到目标表。我希望这可以解决你的问题。