csv 大容量加载数据转换错误(截断)

z8dt9xmd  于 2023-09-28  发布在  其他
关注(0)|答案(8)|浏览(285)

我得到这个错误

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

这里是CSV.它只有一行

30,Bill,Worthy,sales,,709888499,[email protected],,"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

问题是大多数时候它工作得很好,但在某些情况下(这是其中之一),我得到的错误
任何关于导致此记录出现此错误的原因的想法

rryofs0p

rryofs0p1#

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

pengsaosao

pengsaosao2#

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

ROWTERMINATOR = '\n'
ROWTERMINATOR = '\r'
ROWTERMINATOR = '\n\r'
ROWTERMINATOR = '\r\n'
4si2a6ki

4si2a6ki3#

异常(0x80131904):第97行第33列的大容量加载数据转换错误(截断)
对于上述错误,可以进行检查

*列的数据类型大小(例如VARCHAR(255)是否足以导入数据。

  • 行终止符例如
  • ROWTERMINATOR = '0x0A'
  • rowcenter = '\n'
  • ROWTERMINATOR = '\r\n'
  • 现场终结者
  • 请确保选定的字段终止符不与数据中的字段一起出现。如果有机会,然后用其他字符替换它,例如。|在文件里
snvhrwxg

snvhrwxg4#

我把标题作为第一行。我把它取下来后就好了。

arknldoa

arknldoa5#

这可以通过在批量插入中使用以下命令轻松解决:

FORMAT ='CSV'

这会处理字符串中的逗号。
如果对您有帮助,请选择此答案。

tmb3ates

tmb3ates6#

如果从“.csv”文件导出/导入数据,请小心。将所有“NULL”替换为空字符串。

6rvt4ljy

6rvt4ljy7#

我从SQL 2016导出了格式化文件

bcp database1.dbo.table1 format nul -f FMTFLDR\table1.fmt -w -S SERVERNAME -T

并将数据导入SQL 2017

BULK INSERT database2.dbo.table1 FROM 'DATAFLDR\table1.data' WITH ( FORMATFILE = 'FMTFLDR\table1.fmt');

由于某种原因,在几个表中,其中一列的导出为SQLCHAR,并报告了截断错误。当我手动更新格式文件,对该字段使用SQLNCHAR时,一切都很好。
表的创建在两个示例中是相同的,但是我可能在database1database2中有一个我还没有理解的差异:D

qnzebej0

qnzebej08#

如果上述方法都没有帮助,就像我的例子一样,那么您需要检查目标表的某个列的维度是否低于源表中的维度

相关问题