2017-09-07 122 views
0

在尝试批量插入Excel文件到一个表,我收到以下错误BULK INSERT

42000 - 为行[SQL服务器]批量加载数据转换错误(截断) 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) 

我BULK INSERT和创建表的代码看起来是这样的

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) 

一旦改变身体列开始,因为1号列,代码似乎工作正常。我无法找出发生此错误的原因。

+2

您的文件在批量插入操作中不应包含标题。在批量插入中,所有行只能是数据行;标题行会导致问题。请参阅Microsoft的[指导](https://docs.microsoft.com/en-us/sql/t-sql/statements/bulk-insert-transact-sql)“FIRSTROW属性不打算跳过列标题跳过标题不被BULK INSERT语句支持。“请删除标题和“FIRSTROW”属性并重试。您是否也可以确认您提供的是发生错误的行中的数据? – rjmd

+0

你插入正确的文件?源文件是一个'.txt',但你已经指出你正在导入一个'.csv'? – rjmd

+0

可能是因为标签之间的引用标题“申请工商管理硕士在第三最好的B学校,住宅校园,100%安置,教育贷款助理”而出现错误。,Avail奖学金 - 未接来电08030072318/www.gibsbschool.com“ – Rakib

回答

3

我只是天真地计数这里,但关于第五列中的错误信息抱怨,和值被截断

你的表定义说service_center是第五列,有50个字符一个最大长度

您发布的示例数据不包含任何选项卡,但其中的数据具有多个分隔事物的空间,而“事物”总是出现在可被4整除的列位置,所以我假设您已经将这些数据放入一个标签大小设置为4的文本编辑器中,然后在发布之前完成“制表符空格”

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

在第3最佳的B学校,住宅校区,100%安置,教育贷款助理“申请MBA,其他奖学金 - 未接来电08030072318/www.gibsbschool。 com“

这明显比50个字符长。如果SQLServer试图将它加载到service_center中,它将失败。

它看起来像这样的数据应该是机构,由文件头判断,而这似乎数据的合理块将被存放在一个“体”

您的文件列出了一个头“DATE”这不会作为列出现在您的表格中,并且可能会导致加载您的数据时发生错误的错误,其中ADDRESS之后的所有数据列将被发送到错误的列中

修复这些问题的某些组合错误(也许只是在正确的位置添加日期列就足够了),我相信事情会以不同的方式运行