В 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.
источник
Ответы:
Можно ли получить файл в виде файла .csv, который можно импортировать как текстовый файл и не будет иметь этой проблемы? Я обычно отбрасываю все файлы Excel и спрашиваю другой формат, потому что SSIS и Excel плохо воспроизводятся на многих уровнях.
источник
Похоже, что нет способа решить эту проблему. Excel просматривает первые несколько строк данных в столбце и всегда ВЫБИРАЕТ тип данных в FLOAT, несмотря ни на что. Мне было дано решение создать шаблон с несколькими символами varchar в первых нескольких строках (8+), чтобы EXCEL выбрал его в качестве типа данных и затем импортировал мои данные. Что помогло, так это то, что, поскольку я использую Source Safe, я могу «зарегистрировать» файл, чтобы он сделал мой файл пакета «Только для чтения», чтобы Visual Studio не смогла изменить мои предварительно определенные типы данных.
источник
Шаг 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 и выполните, теперь вы сможете загружать данные как они есть из файла.
источник