我正在尝试使用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
答案 0 :(得分:0)
由于您有4列(包括主键列),因此您必须提供所有四列的数据。因此,第一个是 IDENTITY 列,您可以为该列提供任何值,因为此列值不会被使用但会被省略。
在您的情况下,如果您提供类似的数据:
1 11 11 11
1 22 22 22
1 33 55 66
我检查过这个并发现它有效。如果您没有任何选项来更改csv文件,则可以创建没有标识列的临时表并执行批量插入操作。之后,您可以通过执行INSERT INTO命令将数据从登台移动到目标表。我希望这可以解决你的问题。