Мы работаем с третьей стороной, и они предоставляют нам файлы, которые в основном являются дампами из их БД. Наша компания поддерживает 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» вместо того, чтобы быть пустым.
Я даже зашел так далеко, что создал свой собственный файл, и у меня все те же ошибки. В моем собственном файле я фактически заполняю последнюю строку, думая, что, может быть, это вызывает проблемы, но, похоже, ошибка указывает на то, что ей не нравится что-то в самом первом столбце.
Может кто-нибудь помочь мне с некоторыми предложениями, пожалуйста?