Проблема с числовым полем в пакете SSIS dtsx

У меня есть пакет SSIS dtsx, который используется для загрузки данных с удаленного сервера базы данных MAS с использованием соединения на основе DSN. Мы загружаем данные из многих таблиц в их таблицы-реплики в SQL-Server. Все работало нормально, пока мы не внесли некоторые изменения в таблицу в MAS. dtsx не работает со следующей ошибкой:

Ошибка: 0xC02090F8 в задаче потока данных, импорте данных, источнике чтения данных [28866]: значение слишком велико для выходного столбца "UDF_TREAD_DEPTH" (29160).

На самом деле я считаю, что это может быть связано с одним полем таблицы «UDF_TREAD_DEPTH», которое является десятичным полем. Это поле отображается в источнике DataReader как "numeric [DT_NUMERIC]" with Length:0, Precision:4 & Scale:2. Раньше у нас были простые данные в формате xx.xx. И теперь я вижу после проблемы, что у нас есть данные, такие как xx.xx, xxx, .. однако тип данных не изменился после того, как я обновил источник Data Reader.

Я считаю, что «Точность должна быть обновлена ​​​​до 5» для данных, которые у нас есть на основе это описание.

Я не могу изменить тип данных, отображаемый на прикрепленном экране (Data Source Output column.png). Когда я отлаживаю этот пакет dtsx, возникает ошибка при загрузке источника чтения данных. Если я прибиваю это правильно - как я могу это исправить. Если есть другие возможности, пожалуйста, дайте мне знать.

введите здесь описание изображения


person Hemant Tank    schedule 10.07.2012    source источник
comment
Мне удалось успешно запустить dtsx после того, как я применил фильтр, который отбрасывал записи со значением поля xxx (т.е. фильтр: TD ‹ 99)   -  person Hemant Tank    schedule 10.07.2012
comment
Если это решение вашего вопроса, я бы предложил вам создать подробный ответ на свой вопрос. Если это не так, не могли бы вы подробнее рассказать о том, что вы все еще хотите знать?   -  person cfrag    schedule 10.07.2012
comment
Мое решение - это всего лишь вывод, и я хотел бы подтвердить его, поэтому, если кто-то поможет мне убедиться, что это возможная причина, я опубликую ответ. Все мои усилия решительно указывают на эту возможность!   -  person Hemant Tank    schedule 11.07.2012


Ответы (2)


Вы пытались редактировать исходный код в расширенном редакторе? (Щелкните правой кнопкой мыши и выберите «Показать расширенный редактор...») Вы можете перейти к разделу входных и выходных параметров (обычно это последняя вкладка), перейти к разделу выходных столбцов (для OLE DB нажмите + рядом с источником OLE DB). Вывод, затем плюс рядом с выходными столбцами, затем выделите имя столбца, который вы хотите изменить) и измените свойства рассматриваемого столбца (найдите свойства типа данных и при необходимости измените точность и масштаб). Если вы не можете этого сделать, вы можете попробовать удалить источник и заменить его новым источником с теми же данными (т. е. воссоздание этого объекта потребует соединения для свойств столбца).

person William Salzman    schedule 10.07.2012
comment
Это источник чтения данных ODBC, и я уже пробовал все настройки в редакторе. Вкладка, в которой отображаются внешние/выходные столбцы, но не позволяет изменить точность/масштаб. Я уже воссоздал его и даже попробовал в новом пакете dtsx, но проблема не устранена. - person Hemant Tank; 11.07.2012

Я обновил данные с помощью маски xxx.xx, поэтому 100 стало 100,00. И это помогло DataReader в SSIS правильно определить тип.

В дополнение к этому я также нашел еще один простой способ сделать это, который не требует поддержки какой-либо функции приведения/преобразования -

UDF_TREAD_DEPTH * 1.00 as UDF_TREAD_DEPTH

Это также позволило DataReader правильно определить тип (то есть точность и масштаб).

person Hemant Tank    schedule 30.08.2012
comment
Не могли бы вы уточнить, что вы здесь сделали, поскольку у меня, похоже, точно такая же проблема, но не в базе данных MAS. - person IanT8; 07.02.2013
comment
Сначала вам нужно определить и изолировать исходные столбцы, которые вызывают эту проблему. Затем, если вы можете заставить свой источник данных обновлять эти столбцы, чтобы они соответствовали формату xxx.xx (т.е. 100 становится 100,00) - это должно работать. Если бы не окончательный вариант, было бы использовать вычисляемый столбец, как я упоминал выше. - person Hemant Tank; 09.02.2013