Проблема усечения данных при импорте Excel из хранилища BLOB-объектов Azure на Sql Server - PullRequest
12 голосов
/ 16 мая 2019

Я пытаюсь импортировать файл Excel, представленный в хранилище BLOB-объектов Azure, на сервер sql

EXCEL File

enter image description here

Запрос

SELECT * 
    FROM OPENROWSET(
        BULK 'container/testfile.xlsx', 
        DATA_SOURCE = 'ExternalSrcImport',
        FORMATFILE='container/test.fmt', FORMATFILE_DATA_SOURCE = 'ExternalSrcImport',
        codepage = 1252,
        FIRSTROW = 1
        ) as data

Формат файла

10.0  
4  
1       SQLCHAR       0       7       "\t"     1     DepartmentID     ""  
2       SQLCHAR       0       100     "\t"     2     Name             SQL_Latin1_General_CP1_CI_AS  
3       SQLCHAR       0       100     "\t"     3     GroupName        SQL_Latin1_General_CP1_CI_AS  
4       SQLCHAR       0       24      "\r\n"   4     ModifiedDate     ""  

Иллюстрация файла формата

enter image description here

при выполнении запроса появляется следующее сообщение об ошибке

Msg 4863, уровень 16, состояние1, строка 210 Ошибка преобразования данных массовой загрузки (усечение) для строки 1, столбца 1 (DepartmentID).

похоже, что терминатор поля в файле формата не работает, есть идеи по импорту файла?

1 Ответ

4 голосов
/ 21 мая 2019

Ваш файл формата представляет собой импорт файла значений, разделенных табуляцией, но в исходном пути вы ссылаетесь на файл xslx.
Файл Xslx - это ZIP-архив нескольких файлов XML, массовый импорт не сможетобработайте это.Чтобы открыть его, вам нужно использовать драйвер Microsoft Jet или ACE, у вас есть несколько примеров здесь: using-openrowset-to-read-excel .Вам нужно будет загрузить файл из хранилища BLOB-объектов на локальные диски перед его обработкой.Вы можете использовать агент SQL или SSIS для его загрузки.

Другим вариантом будет сохранение данных в виде файла CSV или файла, разделенного табуляцией, и загрузка их непосредственно из хранилища BLOB-объектов.

...