尝试将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列更改为第一列的开头,代码似乎正常工作。我无法找出发生此错误的原因。
答案 0 :(得分:3)
我只是天真地在这里计数,但错误消息抱怨第五列,并且该值被截断
您的表定义说service_center是第五列,最大长度为50个字符
您发布的示例数据并不包含任何标签,但其中的数据有多个空格分隔,以及"事物"总是发生在可被4整除的列位置,因此我假设您已将此数据放入文本编辑器中,并将标签大小设置为4,并对空格"标签进行操作" 34;在你发布之前发表了
这意味着数据的第五个元素是:
"申请MBA在第三佳B校,住宿校区,100%安置,教育贷款助理,Avail奖学金 - 错过电话08030072318 / www.gibsbschool.com"
显然超过50个字符。如果SQLServer尝试将其加载到service_center中,它将失败。
看起来这个数据应该是BODY,从文件头开始判断,这似乎是一个合理的数据块,将保存在" body"
您的文件列出标题" DATE"在您的表中不作为列存在,并且这可能导致加载数据时出现一个错误,其中ADDRESS之后的所有数据列都被发送到错误的列
修复这些错误的一些组合(可能只是在正确的位置添加一个日期列就足够了)并且我确定事情会有所不同