我正在将数据从管道分隔的CSV文件大容量导入到SQL Server中。数据的格式如下
A|B|CCCCCC\r\n
通过在十六进制编辑器中查看CSV文件,我已经验证了该文件是UTF-8格式的,并且以"\r\n“结尾。
该命令为
BULK INSERT MyTable FROM 'C:\Path\File.csv'
WITH (FIRSTROW=1, MAXERRORS=0, BATCHSIZE=10000, FIELDTERMINATOR = '|',
ROWTERMINATOR = '\r\n')第三列最初被定义为CHAR(6),因为该字段始终是恰好6个(ASCII)字符宽度的代码。这导致在大容量插入期间出现截断错误。
然后,我将列加宽为CHAR(8)。导入有效,但是
SELECT CAST(Col3 As VARBINARY(MAX))指示列数据以0x0D0A结束(或"\r\n",行终止符)
为什么行终止符包含在导入的数据中,我如何解决这个问题?
发布于 2013-05-01 23:16:06
长话短说,SQL Server不支持UTF8,您只需要使用\n作为行终止符。
因为您没有提供表定义或精确的错误消息,所以实际上有点不清楚发生了什么。话虽如此,我可以加载以下数据:
create table dbo.BCPTest (
col1 nchar(1) not null,
col2 nchar(1) not null,
col3 nchar(6) not null
)
/* This data can saved as ASCII, UTF-16 with BOM or UTF-8 without BOM
(see comments below)
A|B|CCCCCC
D|E|FFFFFF
*/
BULK INSERT dbo.BCPTest FROM 'c:\testfile.csv'
WITH (FIELDTERMINATOR = '|', ROWTERMINATOR = '\n')评论:
当我在记事本中创建并保存为"UTF-8“时,它添加了物料清单字节0xEFBBBF,这是标准的UTF-8 BOM
BULK INSERT命令\n而不是\r\n,因为\n是interpreted as a "newline",也就是说,SQL Server (和/或Windows)是“聪明的”解释\n而不是字面上的。这很可能是\r和\n的C handling的结果,这不需要从字面上解释。https://stackoverflow.com/questions/16312096
复制相似问题