批量加载数据转换错误(截断)

时间:2011-09-22 20:00:28

标签: sql sql-server sql-server-2008 csv bulkinsert

我收到此错误

Bulk load data conversion error (truncation) for row 1, column 12 (is_download)

这里是csv ...它只有一行

30,Bill,Worthy,sales,,709888499,bat@bat.com,,"Im a a people person., to work together for this new emerging env.HTTP://applesoftware.com","Bill and Son of Co","Contact Us: Contact Form",0

这是我的批量插入声明......

SE SalesLogix
GO

CREATE TABLE CSVTemp
(id INT,
firstname VARCHAR(255),
lastname VARCHAR(255),
department VARCHAR(255),
architecture VARCHAR(255),
phone VARCHAR(255),
email VARCHAR(255),
download VARCHAR(255),
comments VARCHAR(MAX),
company VARCHAR(255),
location VARCHAR(255),
is_download VARCHAR(255)
)
GO

BULK
INSERT CSVTemp
FROM 'c:\leads\leads.csv'
WITH
(
DATAFILETYPE = 'char', 
BATCHSIZE = 50, 
FIELDTERMINATOR = ',', 
ROWTERMINATOR = '\n' 
)
GO
--Check the content of the table.
SELECT *
FROM CSVTemp
GO

问题是大部分时间它都很好但在某些情况下(这是其中之一)我得到了错误

关于导致此记录出现此错误的原因的任何想法

6 个答案:

答案 0 :(得分:13)

它将注释字段中的逗号作为分隔符,因为分隔符不一致。最好的解决方案是确保所有字段都用双引号括起来,并将FIELDTERMINATOR设置为'","'。或者,将逗号替换为不太可能出现在评论中的内容(例如~)并设置FIELDTERMINATOR = '~'

答案 1 :(得分:8)

除了Wil的评论之外,它似乎看到了所有12列,所以它可能只是你的rowterminator不正确。首先,确保将这些文件放在一起的程序实际上是在最后一行的末尾放回车;我不得不纠正许多不是这种情况的程序。一旦你确定那里有回车符,你可能需要试验一下它的回车类型。有时它只是char(10),有时只有char(13),有时可能两者都有,但顺序错误。所以试验:

ROWTERMINATOR = '\n'
ROWTERMINATOR = '\r'
ROWTERMINATOR = '\n\r'
ROWTERMINATOR = '\r\n'

答案 2 :(得分:0)

  

System.Data.SqlClient.SqlException(0x80131904):第97行第33行的批量加载数据转换错误(截断)

对于上述错误,您可以检查

    列的
  • 数据类型大小(例如VARCHAR(255))是否足以导入数据。
  • 行终止符,例如
    • ROWTERMINATOR =' 0x0A'
    • ROWTERMINATOR =' \ n'
    • ROWTERMINATOR =' \ r \ n'
  • FIELDTERMINATOR
    • 确保数据中没有出现所选字段终止符。如果有可能,请将其替换为其他字符,例如|在文件中。

答案 3 :(得分:0)

我把标题作为第一行。我将其删除后,一切都很好。

答案 4 :(得分:0)

可以在批量插入中使用以下内容轻松解决此问题:

FORMAT ='CSV'

这将处理字符串中的逗号。

如果有帮助,请选择它作为答案。

答案 5 :(得分:0)

如果您从“.csv”文件导出/导入数据,请务必小心。用空字符串替换所有 'NULL'。 OriginalData

ExportData