SQL 批量插入 UTF-8

SQL Bulk Insert UTF-8

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

我正在使用批量插入在 table 中加载 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
The bulk load failed. The column is too long in the data file for row 1, column 1. Verify that the field terminator and row terminator are specified correctly.

Msg 7301, Level 16, State 2, Line 1
Cannot obtain the required interface ("IID_IColumnsInfo") from OLE DB provider "BULK" for linked server "(null)".

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

输出看起来像这样

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

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

谢谢

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