我将数据从管道分离的CSV文件批量导入SQL Server。数据的格式类似于
A | B | CCCCCC \ r \ n
我已经验证了该文件是UTF-8格式,并且通过在十六进制编辑器中查看CSV文件以“\ 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”,行终止符)结束
为什么行终止符包含在导入的数据中?如何解决?
答案 0 :(得分:1)
简而言之,SQL Server不支持UTF-8,您只需要\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')
评论:
BULK INSERT
命令\n
而不是\r\n
,因为\n
是interpreted as a "newline",即SQL Server(和/或Windows)通过解释{{ 1}}语义而不是字面意思。这很可能是\n
\r
和\n
的结果,不需要对它们进行字面解释。