【问题标题】:SQL Bulk Insert UTF-8SQL 批量插入 UTF-8
【发布时间】:2017-09-27 11:31:54
【问题描述】:

我有一个带有 ¬ 字段分隔符和 [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 但没有任何效果,我收到以下错误。

消息 4866,第 16 级,状态 8,第 1 行
批量加载失败。数据文件中第 1 行第 1 列的列太长。请验证是否正确指定了字段终止符和行终止符。

消息 7301,第 16 级,状态 2,第 1 行
无法从链接服务器“(null)”的 OLE DB 提供程序“BULK”获取所需的接口(“IID_IColumnsInfo”)。

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

输出如下所示

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

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

谢谢

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

    • 我曾用十六进制值尝试过,但没有运气。不过你是对的,看来它可以归结为将文件转换为 UTF-16。
    猜你喜欢
    • 2017-01-20
    • 1970-01-01
    • 2015-08-09
    • 2010-09-24
    • 2016-01-31
    • 2013-02-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多