BULK INSERT проблемы с SQL Server 2012 и более поздних версий - PullRequest
0 голосов
/ 10 сентября 2018

Мы работаем с третьей стороной, и они предоставляют нам файлы, которые в основном являются дампами из их БД. Наша компания поддерживает SQL Server 2012, а также SQL Server 2014 и выше. Мне нужно НАСТРОИТЬ ВСТАВКУ этих файлов, и ОДИН набор файлов работает для любого клиента.

Они предоставляют нам файлы из системы UNIX в кодировке utf-8. Я знаю, что SQL Server 2012 не поддерживает utf-8. Читая здесь, я пошел по пути преобразования этих файлов в UTF-16 (используя Textpad8). Всего около 22 файлов.

Я использую следующий синтаксис:

BULK INSERT database.dbo.tablename 
FROM '\\server\filename.txt' 
WITH (FIRSTROW =2, ROWTERMINATOR ='0x0a')

Это, конечно, работает для всех файлов в окне SQL Server 2014.

ОДИН файл из 22 НЕ работает для SQL Server 2012, и я не могу понять, что не так. Этот конкретный файл помещается в таблицу, определенную следующим образом:

CREATE TABLE [dbo].[Map]
(
    termid int NOT NULL,
    mapguid char(22) NOT NULL,
    mapsequence int NOT NULL,
    conceptguid char(22) NOT NULL,
    mapdefnguid char(22) NOT NULL,
    mapquality int NULL, 

    CONSTRAINT [PK_Map] 
        PRIMARY KEY CLUSTERED ([termid] ASC, [mapguid] ASC, [mapsequence] ASC)
) ON [PRIMARY];

Вот как выглядит пример данных

termid  mapguid mapsequence conceptguid mapdefnguid mapquality
260724  Nm9T2QFFs67xk2/zCgEDHw  0   AExH2wEce5u4wbhnqf4ZgQ  TDMQWQE6UQdXAoATCgECyQ  
172288  AW8L6AEj+br0hsZ3CgEBig  0   BgCTWgDjf6OlTk1oCwsLDQ  AUKoDQEjn6KrxIAJCgEBmw  
377707  PtArUQE7q1ajeoiRCgEDAQ  0   ACSYtQDsdrQtN1h2qf79/w  TDMQWQE6UsYdrYAbCgECeg  

tab - разделитель столбцов, а LF - символ завершения строки

Это ошибка, которую я получаю:

Сообщение 4864, Уровень 16, Состояние 1, Строка 1
Ошибка преобразования данных при массовой загрузке (несоответствие типов или недопустимый символ для указанной кодовой страницы) для строки 2, столбца 1 (termid).

Сообщение 4864, Уровень 16, Состояние 1, Строка 1
Ошибка преобразования данных при массовой загрузке (несоответствие типов или недопустимый символ для указанной кодовой страницы) для строки 3, столбца 1 (termid).

Я искал эту ошибку в Google (и здесь) и видел, где вы можете получить эту ошибку, если что-то фактически указано буквально как «NULL» вместо того, чтобы быть пустым.

Я даже зашел так далеко, что создал свой собственный файл, и у меня все те же ошибки. В моем собственном файле я фактически заполняю последнюю строку, думая, что, может быть, это вызывает проблемы, но, похоже, ошибка указывает на то, что ей не нравится что-то в самом первом столбце.

Может кто-нибудь помочь мне с некоторыми предложениями, пожалуйста?

1 Ответ

0 голосов
/ 11 сентября 2018

Я не знаю, ДЕЙСТВИТЕЛЬНО ли это ответ, но каким-то образом файл импортируется нормально с кодировкой utf-8, что не имеет большого смысла для меня, так как SQL 2012 не должен поддерживать это. Я посмотрел на данные в таблице, и, похоже, все в порядке, поэтому у меня нет там объяснения.

Затем я преобразовал файл в utf-16, перезапустил процесс и снова начал получать вышеуказанные ошибки, так что ... shrug

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