SSIS Импорт Excel в SQL Проблемы усечения - PullRequest
0 голосов
/ 11 ноября 2018

Я использую SSIS 2012 и SQL Server 2014. У меня была эта проблема навсегда, и у меня есть YET, чтобы увидеть жизнеспособное решение - и я не уверен, почему больше людей не испытывают эту проблему. Вот моя простая задача потока данных:

enter image description here

Я получаю множество файлов Excel от клиентов. Проблема состоит в том, что некоторые поля содержат текст, длина которого превышает 255 символов - и, как мы все знаем, Microsoft НЕ достаточно умна, чтобы читать все строки (первые 8 записей читаются и предполагают, что если первые 8 строк меньше 255 символов, тогда ВСЕ строки должны быть меньше 255).

Конечно, это приводит к ошибкам усечения. Даже если я установлю для своего целевого столбца SQL значение nvarchar(max), службы SSIS все равно выдадут ошибку. Я уверен, что многие сталкивались с простым использованием SSMS, и импорт файла Excel вручную вызовет эту ошибку. Для моего пакета служб SSIS у меня есть задача преобразования данных, которая предположительно преобразует исходные данные в формат, который затем может быть перенесен в SQL Server. Очевидно нет.

Вот моя простая задача потока данных с выделенным столбцом сбоя:

enter image description here

Итак, ограниченные решения, которые я нашел в Интернете, рекомендуют сортировать данные так, чтобы самое широкое текстовое значение находилось сверху, чтобы SQL Server мог их прочитать. Я не могу сделать это для сотен файлов каждый раз. И мне нужны данные в исходном порядке сортировки, так что это невозможно. Или я должен вставить фиктивную запись в качестве первой строки в файле Excel.

А как бы это сделать - в задании сценария? Опять же, более сотни файлов? Я также слышал, что могу как-то изменить реестр. Хочу ли я возиться с этим? Есть ли что-нибудь из этого практичное?

Я не видел в Интернете ничего похожего на мою ситуацию - и я сбит с толку. Как это может быть? Я не могу быть единственным, кто сталкивается с подобными проблемами усечения.

В любом случае, я ценю любую помощь.

Ответы [ 2 ]

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

В результате моего собственного разочарования из-за неадекватной диагностики типов данных в импортированных данных SSMS я написал инструмент для выполнения этой работы. Это работает лучше для меня; это может работать лучше для вас, если вы открыты для решений сценариев вне среды Microsoft. Инструмент представляет собой скрипт Python, доступный по адресу https://pypi.org/project/execsql/. Команда IMPORT будет считывать весь файл Excel или CSV для определения типов данных, в значительной степени гарантируя, что данные будут успешно импортированы. Импорт из CSV на намного быстрее, чем импорт из Excel, и разрывы строк внутри столбцов CSV-файла обрабатываются правильно.

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

Потенциальные решения:

1 - Измените размер выборки, обновив TypeGuessRows в разделе реестра для HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Jet\4.0\Engines\Excel. Путь может не совпадать на вашем компьютере, но он будет похож.

2 - используйте Flat File Connection Manager вместо Excel Connection Manager, щелкните правой кнопкой мыши, перейдите в расширенный редактор, перейдите на вкладку Свойства ввода и вывода, найдите столбец слева под столбцами вывода и установите его длину 1000.

enter image description here

...