SQL批量插入UTF-8

时间:2017-09-27 11:31:54

标签: utf-8 sql-server-2014 bulkinsert codepages hyphen

我有一个带有¬字段分隔符和[CR][LF]行终止符的UTF-8文件。 SQL版本是Microsoft SQL Server 2014(SP2-CU7)(KB4032541) - 12.0.5556.0(X64)

我正在使用批量插入来加载表格中的txt图块,如下所示:

DECLARE @bulk_cmd varchar(1000)

SET @bulk_cmd = 'BULK INSERT [test].pcb_Load
FROM ''T:\pcb_Workspace_2\Outputs\pcb\Load\pcb_MS_TEST_2.txt''
WITH (FIELDTERMINATOR = ''¬'', ROWTERMINATOR = '''+CHAR(10)+''',FIRSTROW=2)'

EXEC (@bulk_cmd)

SELECT * FROM test.pcb_load

我尝试使用代码页65001,行终止符\ r,\ n,\ r \ n,0x0a但没有任何效果,我收到以下错误。

  

Msg 4866,Level 16,State 8,Line 1
  批量加载失败。第1行第1列的数据文件中的列太长。验证是否正确指定了字段终止符和行终止符。

     

Msg 7301,Level 16,State 2,Line 1
  无法从OLE DB提供程序“BULK”获取链接服务器“(null)”所需的接口(“IID_IColumnsInfo”)。

因此,在删除代码页并使用CHAR(10)(即上面的脚本)之后,我的文件会加载,但在每个字符串的末尾都留下一个连字符,并且在空列中也是如此。

输出看起来像这样

Col1    Col2    Col3        Col4
-       0-      pcb1412-    DD-
-       0-      pcb2134-    GFD-
-       0-      pcb324-     DDX-
-       0-      pcb1234-    DDR-

数据正确,但连字符不在文件中。你能告诉我哪里出错吗?

由于

1 个答案:

答案 0 :(得分:0)

将LF和CR的ROWTERMINATOR更改为十六进制值'0x0a'只是为了明确,尽管这不是您真正问题的根源。我想你将不得不将你的文件转换为UTF-16。我知道早期版本的SQL Server不支持UTF-8,我认为2012年也没有,但可能是错误的。