Массовая вставка TSQL со специальным символом в качестве разделителя - PullRequest
0 голосов
/ 20 февраля 2019

Мне нужна возможность bulk insert в экземпляре SQL Server 2016 (свойства 13.0.4224.16 - FORMAT и FIELDQUOTE недоступны) для специальных символов в качестве разделителя полей, а также для включения любых символов Unicode, которыеможет быть в наборах данных.Я пытаюсь использовать ¿ (Hex 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, который импортирует символы Юникода без проблем с использованием разделителя канала, но использование разделителя специальных символов приводит к этой ошибке:

Массовая загрузка: в данных обнаружен неожиданный конец файлафайл.

Редактировать: Я изменил файл импорта txt на кодировку UTF-16, но все еще сталкиваюсь с теми же проблемами.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...