2016-11-11 52 views
1

我试图在SQL Server中运行以下命令,它不工作:批量插入在SQL服务器失败“列太长”

bulk insert dbo.Sales 
from 'C:\Users\sram1\Downloads\SalesFile20161103\SALECOPY.TXT' 
with 
(
    FIRSTROW = 1, 
    FIELDTERMINATOR = '\t', 
    ROWTERMINATOR = '0x0a' 
) 

这里是印刷错误信息:

Msg 4866,Level 16,State 1,Line 131
批量加载失败。数据文件中第1行第1列的列太长。验证字段终止符和行终止符是否正确指定。

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

Msg 7330,Level 16,State 2,Line 131
无法从链接服务器“(空)”的OLE DB提供程序“BULK”中获取一行。

我看着整个StackOverflow,看到我应该改变rowterminator,我已经尝试'0x0a'和'\ r \ n'。我的数据是用制表符分隔的,但看起来在某些情况下,制表符是2个空格,其他时间更多,其他时间更少。这可能是问题的根源吗?如果是这样,我该如何解决它?

+0

它是制表符,即ascii字符9,还是空格?如果选项卡已被转换为空格,那么它根本找不到任何分隔符。 –

回答

1

我的数据是制表符分隔,但现在看来,在某些情况下,标签是2位

没有一个制表符不能是两个空格。 制表符分隔并不意味着“数据在屏幕上显示时向上”。这意味着每列值之间有一个ASCII tab字符。

如果这是一次性事情,您可以将数据导入到Excel中,并将其导出为制表符分隔。如果这是一件普通的事情,那么您需要学习如何检查文件以查找非打印字符,更改行结束符以及修改分隔符。

HTH。