SQL SERVER截断错误

时间:2017-09-07 06:48:08

标签: sql sql-server csv

尝试将excel文件批量插入表格时,我收到以下错误

  

42000 - [SQL Server]第2行第5列(service_center)的批量加载数据转换错误(截断)。

制表符分隔文件看起来像这样

protocol    address  date   type    body    service_center  read_status status  date_sent   readable_date   contact_name
0   AM-GIBSBS   " 14,98,31,75,95,113 "  1   "Apply for MBA in 3rd Best B-School, Residential Campus, 100% Placement, Education Loan Asst., Avail Scholarship - Missed Call 08030072318 / www.gibsbschool.com"   +919892081135   1   -1  1.49832E+12 "Jun 24, 2017 20:49:55" (Unknown)

我的批量插入和创建表格代码看起来像这样

CREATE TABLE sms_tbl (
    protocol VARCHAR(50),
    address VARCHAR(50),
    type VARCHAR(50),
    body VARCHAR(500),
    service_center VARCHAR(50),
    read_status VARCHAR(50),
    status VARCHAR(50),
    date_sent VARCHAR(50),
    readable_date VARCHAR(50),
    contact_name VARCHAR(50))


BULK INSERT sms_tbl
    FROM 'C:\Users\BIKASH-pc\SmsCallContact\SMS_Bikash.txt'
        WITH ( FIELDTERMINATOR = '\t', ROWTERMINATOR = '\n',FIRSTROW=2)

将body列更改为第一列的开头,代码似乎正常工作。我无法找出发生此错误的原因。

1 个答案:

答案 0 :(得分:3)

我只是天真地在这里计数,但错误消息抱怨第五列,并且该值被截断

您的表定义说service_center是第五列,最大长度为50个字符

您发布的示例数据并不包含任何标签,但其中的数据有多个空格分隔,以及"事物"总是发生在可被4整除的列位置,因此我假设您已将此数据放入文本编辑器中,并将标签大小设置为4,并对空格"标签进行操作" 34;在你发布之前发表了

这意味着数据的第五个元素是:

  

"申请MBA在第三佳B校,住宿校区,100%安置,教育贷款助理,Avail奖学金 - 错过电话08030072318 / www.gibsbschool.com"

显然超过50个字符。如果SQLServer尝试将其加载到service_center中,它将失败。

看起来这个数据应该是BODY,从文件头开始判断,这似乎是一个合理的数据块,将保存在" body"

您的文件列出标题" DATE"在您的表中不作为列存在,并且这可能导致加载数据时出现一个错误,其中ADDRESS之后的所有数据列都被发送到错误的列

修复这些错误的一些组合(可能只是在正确的位置添加一个日期列就足够了)并且我确定事情会有所不同