具有特殊字符作为分隔符的TSQL批量插入

时间:2019-02-20 15:33:58

标签: sql sql-server database tsql upload

我需要能够bulk insert进入SQL Server 2016实例(13.0.4224.16-FORMATFIELDQUOTE属性不可用)上的特殊字符作为字段定界符,并能够还包括数据集中可能存在的任何Unicode字符。我正在尝试使用¿(十六进制0xBF)或我知道不在数据集中的任何字符作为字段定界符。

我有一个UTF-8编码的test.txt文件,其中包含一些测试数据(数据集中的标题除外):

foo¿bar¿foobar¿
\n < last line

和要插入的TSQL语句:

BULK INSERT [dbo].[testTable]
FROM 'C:\Datasource\test.txt'
WITH (KEEPNULLS,
      MAXERRORS=0,
      FIELDTERMINATOR='0xBF');

进入此表:

create table [dbo].[testTable](
    col1 nvarchar(50),
    col2 nvarchar(50),
    col3 nvarchar(50),
    col4 nvarchar(50)
)

当我在select上运行testTable时,它将返回:

col1    col2    col3    col4
foo┬    bar┬    foobar┬ NULL

为什么显示这些个字符?我猜这是我的分隔符编码错误并包含在数据中吗?如果将定界符更改为|,我可以毫无问题地获取数据,但它存在于我的数据集中,并且会进一步破坏插入内容。我尝试添加CODEPAGE=65001,它使用管道定界符毫无问题地导入Unicode字符,但是使用特殊字符定界符会导致以下错误:

  

大容量加载:数据文件中出现意外的文件结尾。

编辑: 我已将导入txt文件更改为UTF-16编码,但仍然遇到相同的问题。

0 个答案:

没有答案