Служба SSIS постоянно меняет исходную строку Excel на плавающую

9

В Excel есть столбец, который должен быть текстовым, но SSIS видит там числовой текст и автоматически делает его плавающим с двойной точностью [DT_R8].

Я могу изменить его вручную в столбцах «Внешний» и «Выход» ветви «Вывод», но «Вывод ошибок» просто не позволяет мне изменить соответствующий столбец.

Error at Extract Stations [Excel Source [1]]: The data type for "output "Excel Source Error Output" (10)" cannot be modified in the error "output column "Group No" (29)".
Error at Extract Stations [Excel Source [1]]: Failed to set property "DataType" on "output column "Group No" (29)".

Я попытался изменить пакет XML. Я попробовал IMEX=1и , typeguessrow=0но ничего из этого не зафиксировал мою проблему. Это имеет какое-то решение вообще? Существуют также статьи, предлагающие изменить реестр, чтобы Excel угадывал больше, чем 8 строк по умолчанию, прежде чем угадывать тип данных. Я не хочу идти по этому пути, потому что даже если бы он работал, мне пришлось бы изменить реестр на машине, на которой я планирую запустить пакет.

Например, поле Excel, которое нужно импортировать в поле SQL nvarchar, читает

295.3
296.33

но они записываются в таблицу SQL как

295.30000000000001
296.32999999999998

Я положил в dataviewers и поля показывают

295.3
296.33

вплоть до выполнения, что является правильным, но я предполагаю, что когда он попадает в источник OLE DB Destination, он каким-то образом преобразует его в

295.30000000000001
296.32999999999998

что неправильно.

У меня также есть такие значения, как V321.1 и V213.34, например, которые определенно не являются целыми числами и должны быть сохранены как varchar.

Хуан Велес
источник
Комментарии не для расширенного обсуждения; этот разговор был перенесен в чат .
Пол Уайт 9

Ответы:

2

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

HLGEM
источник
1
Я прыгаю изменения в .csv или txt файл в ближайшем будущем. сделает все намного проще.
Хуан Велес
2

Похоже, что нет способа решить эту проблему. Excel просматривает первые несколько строк данных в столбце и всегда ВЫБИРАЕТ тип данных в FLOAT, несмотря ни на что. Мне было дано решение создать шаблон с несколькими символами varchar в первых нескольких строках (8+), чтобы EXCEL выбрал его в качестве типа данных и затем импортировал мои данные. Что помогло, так это то, что, поскольку я использую Source Safe, я могу «зарегистрировать» файл, чтобы он сделал мой файл пакета «Только для чтения», чтобы Visual Studio не смогла изменить мои предварительно определенные типы данных.

Хуан Велес
источник
1

Шаг 1: Добавьте IMEX=1; MAXROWSTOSCAN=0строку подключения (например, Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Source\filename.xlsx;Extended Properties="EXCEL 12.0 XML;HDR=YES;IMEX=1; MAXROWSTOSCAN=0").

Шаг 2: Закройте решение. Откройте пакет служб SSIS в текстовом редакторе и найдите столбцы, которые возвращались к предварительно определенному типу данных. Обновите его вручную в файле XML до нужного формата.

Шаг 3: Откройте пакет в SQL Server Data Tool и выполните, теперь вы сможете загружать данные как они есть из файла.

user1968485
источник
Извините, но исходный тип данных отсутствует в пакете. Только типы столбцов назначения. Это снова отрицательно сказывается на цели, так как преобразование все еще происходит в стороне от драйвера Microsoft.Ace (или какого-либо другого драйвера), и потеря данных уже произошла к тому времени, когда они попадают в SSIS и таблицу назначения.
Обратно инженер