繁体   English   中英

在SQL Server截断错误中批量插入

[英]BULK INSERT in SQL SERVER Truncation Error

尝试将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列更改为第一列的开头时,该代码似乎正常工作。 我无法找出发生此错误的原因。

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

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

您发布的示例数据不包含任何选项卡,但其中的数据具有多个分隔事物的空格,并且“事物”始终出现在可被4整除的列位置上,因此我假设您已将该数据放入标签大小设置为4的文本编辑器,并在发布之前对其进行了“制表符到空格”

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

“在第三届最佳B学校,住宅校园,100%安置,教育贷款助理,Avail奖学金申请MBA-错过的电话08030072318 / www.gibsbschool.com”

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

根据文件头判断,该数据似乎应该放在BODY中,并且这似乎是一个合理的数据块,将保留在“正文”中

您的文件将表中不存在的标题“ DATE”列为一列,这可能导致加载数据时出现一次错误的错误,其中将ADDRESS之后的所有数据列发送到错误的列中

修复这些错误的某种组合(也许只需将日期列添加到表中的正确位置就足够了),我相信事情会有所不同

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM