首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >大容量插入包括行终止符

大容量插入包括行终止符
EN

Stack Overflow用户
提问于 2013-05-01 10:54:19
回答 1查看 2.3K关注 0票数 1

我正在将数据从管道分隔的CSV文件大容量导入到SQL Server中。数据的格式如下

A|B|CCCCCC\r\n

通过在十六进制编辑器中查看CSV文件,我已经验证了该文件是UTF-8格式的,并且以"\r\n“结尾。

该命令为

代码语言:javascript
复制
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)。导入有效,但是

代码语言:javascript
复制
SELECT CAST(Col3 As VARBINARY(MAX))

指示列数据以0x0D0A结束(或"\r\n",行终止符)

为什么行终止符包含在导入的数据中,我如何解决这个问题?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-05-01 23:16:06

长话短说,SQL Server不支持UTF8,您只需要使用\n作为行终止符。

因为您没有提供表定义或精确的错误消息,所以实际上有点不清楚发生了什么。话虽如此,我可以加载以下数据:

代码语言:javascript
复制
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

  • But,
  • doesn't support UTF-8, it supports UTF-16 (官方文档here),并且它expects了一个0xFFFE
  • 的物料清单,所以我在记事本中再次将文件保存为"Unicode",并添加了0xFFFE物料清单;这加载得很好,如上所示。出于好奇,我也把它(使用Notepad++)保存为“没有BOM的UTF-8”,并且我也可以加载这个文件,将文件保存为ASCII也可以加载相同的表数据类型和BULK INSERT命令
  • 行终止符应该是\n而不是\r\n,因为\ninterpreted as a "newline",也就是说,SQL Server (和/或Windows)是“聪明的”解释\n而不是字面上的。这很可能是\r\nC handling的结果,这不需要从字面上解释。
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16312096

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档