Не удается импортировать данные в SQL Server из базы данных Progress, проблема с преобразованием типа данных?


Я пытаюсь импортировать данные из базы данных прогресса в базу данных сервера MS SQL 2005.

На SQL Server я щелкаю правой кнопкой мыши на своем имени схемы и иду Tasks > Import Data... и запускаю мастер.

У меня есть подключение ODBC к progress setup, никаких проблем там нет, я также тестирую свои запросы с помощью ODBC Explorer first, чтобы убедиться, что у меня нет проблем с синтаксисом.

Я использую следующее утверждение:

SELECT "MYTABLE"."FIRST-NAME",
       "MYTABLE"."LAST-NAME",
       "MYTABLE"."D-O-B"
FROM PUB."MYTABLE"

Это прекрасно работает в ODBC Explorer, но когда я пытаюсь использовать это в SSIS я получаю следующую ошибку

Executing (Error)
Messages
Error 0xc02090f5: Data Flow Task: The component "Source - Query" (1) was unable to process the data.
 (SQL Server Import and Export Wizard)



Error 0xc0047038: Data Flow Task: SSIS Error Code DTS_E_PRIMEOUTPUTFAILED.  The PrimeOutput method on component "Source - Query" (1) returned error code 0xC02090F5.  The component returned a failure code when the pipeline engine called PrimeOutput(). The meaning of the failure code is defined by the component, but the error is fatal and the pipeline stopped executing.  There may be error messages posted before this with more information about the failure.
 (SQL Server Import and Export Wizard)

Error 0xc0047021: Data Flow Task: SSIS Error Code DTS_E_THREADFAILED.  Thread "SourceThread0" has exited with error code 0xC0047038.  There may be error messages posted before this with more information on why the thread has exited.
 (SQL Server Import and Export Wizard)

Error 0xc0047039: Data Flow Task: SSIS Error Code DTS_E_THREADCANCELLED.  Thread "WorkThread0" received a shutdown signal and is terminating. The user requested a shutdown, or an error in another thread is causing the pipeline to shutdown.  There may be error messages posted before this with more information on why the thread was cancelled.
 (SQL Server Import and Export Wizard)

Error 0xc0047021: Data Flow Task: SSIS Error Code DTS_E_THREADFAILED.  Thread "WorkThread0" has exited with error code 0xC0047039.  There may be error messages posted before this with more information on why the thread has exited.
 (SQL Server Import and Export Wizard)

Моей первой мыслью была, возможно, проблема между типами данных Date между Progress и MSSQL, поэтому я попробовал TO_CHAR в своем заявлении (сначала протестированном в ODBC Explorer), но это не решило ее, я попробовал все, что я могу придумать, включая

  1. использование TO_CHAR в ходе выполнения Оператор Select
  2. во время отображения данных в SSIS; попробуйте использовать Datetime, smalldatetime, nvarchar и т.д..
  3. используя TO_CHAR и NVL
  4. увеличение размера всех столбцов назначения до 200 (ни один столбец не должен быть больше 50 в текущий момент, так что этого более чем достаточно)

Даже удаление этого поля даты из инструкции select все равно приводит к той же ошибке

Есть ли что-нибудь, что я пропустил? Возможно ли, что исходные данные могут быть неверными и не поддерживаться в SQL Server?

Я нашел несколько сообщений на MSDN предположение, что может быть проблема с типом данных преобразование и может также возникнуть проблема с переполнением столбцов данных в ходе выполнения

Похоже, это временная проблема, у меня есть другие задания импорта данных из Прогресса, которые используют даты, и нет никаких проблем (и да, я перекрестно ссылался на все настройки, чтобы убедиться, что я ничего не пропустил)

Мой единственный вариант, кажется, состоит в том, чтобы переместить данные из Progress > Access (или какой-то другой БД) > MS SQL

4 2

4 ответа:

БД прогресса хранит все данные в виде переменной длины. Это часто вызывает проблемы с базами данных, которые ожидают, что данные будут фиксированной длины. Решение заключается в запуске утилиты" dbtool".

Dbtool находится в каталоге Progress "bin". Вы хотите Вариант № 2 "в SQL ширина сканирования ж/исправить вариант".

Когда сомневаешься:

Progress --> CSV file --> SSIS --> SQL Server

Мне повезло использовать объект SQL Linked Server для подключения базы данных Progress через поставщика Microsoft OLE DB для драйверов ODBC. Для запроса связанного сервера необходимо использовать объект OpenQuery, который выглядит следующим образом:

select MyField, MyOtherField from OpenQuery ([MyLinkedServer],'select MyField, MyOtherField from PUB.My_ProgressTable where dtLastUpdated > {d ''2009-01-31''}') 

Для ODBC DSN, устанавливающего уровень изоляции по умолчанию на вкладке Advanced в 'READ UNCOMMITTED'

Это использование SQL 2005 против БД Progress 10.1 B на сервере Linux. Возможно, не самое элегантное и эффективное решение, но оно было довольно надежный.

Та же проблема здесь (драйвер 32 бит INFORMIX 3.81 через ODBC)

Причина: SSIS терпит неудачу при пустых строках: ". Может быть, он не может отличить его от нуля.

Разрешение: вместо:

  select col from xxx

Поставить:

  select case when col = '' then NULL else col end col from xxx

Работает на меня.