【问题标题】:BULK INSERT in SQL SERVER Truncation ErrorSQL SERVER 截断错误中的 BULK INSERT
【发布时间】:2018-02-15 19:05:21
【问题描述】:

在尝试将 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)

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

【问题讨论】:

  • 您的文件不应在批量插入操作中包含标题。在批量插入中,所有行都应该只是数据行;标题行会导致问题。请参阅 Microsoft 的 guidance 关于此“FIRSTROW 属性不打算跳过列标题。BULK INSERT 语句不支持跳过标题。”请删除标题和FIRSTROW 属性并重试。您还可以确认您提供的是出现错误的行中的数据吗?
  • 您插入的文件是否正确?源文件是.txt,但您已表明您正在导入.csv
  • 您可能会因为引用之间的选项卡而出现错误“申请第三最佳商学院的 MBA,住宅校园,100% 安置,教育贷款助理,可用奖学​​金 - 未接电话 08030072318 / www .gibsbschool.com"
  • @Rakib 我不知道微软的指导。感谢那。但我仍然遇到同样的错误。而且我正在使用 .tsv 文件,因为在我的情况下,逗号似乎不能用作分隔符。
  • 我最初的想法是,但是在notepad++中打印了不可打印的字符后,我发现引号内实际上没有制表符。

标签: sql sql-server csv


【解决方案1】:

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

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

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

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

“申请第三佳商学院的 MBA,住宿校园,100% 安置,教育贷款助理,可用奖学​​金 - 未接电话 08030072318 / www.gibsbschool.com”

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

从文件头来看,这些数据看起来应该在 BODY 中,而且这似乎是一个合理的数据块,可以保存在“body”中

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

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

【讨论】:

  • @Luv - 您的编辑完全破坏了答案的全部含义。请多加注意
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多