Сбой импорта служб SSIS (2008R2) из ​​mssql в mysql из-за столбца даты - PullRequest
1 голос
/ 12 октября 2011

У меня есть соединение oledb с mssql и адрес назначения ado.net (с драйвером odbc) к mysql.Таблицы абсолютно одинаковы, и все столбцы работают в одном столбце.

Получено сообщение об ошибке: [Назначение ADO NET [325]] Ошибка: во время вставки данных возникла исключительная ситуация, сообщение от провайдера: Не удалось преобразовать объект типа 'System.DateTime' втип 'System.Char []'.

Я видел похожие вопросы о других типах данных, но здесь разрешение перехода на строку не работает.Если я преобразую в строку (должна быть длина 29, в противном случае шаг преобразования завершится неудачно), я получаю следующее сообщение об ошибке:

[ADO NET Destination [325]] Ошибка: во время вставки данных возникла исключительная ситуация, сообщениеот провайдера возвращается: ОШИБКА [HY000] [MySQL] [Драйвер ODBC 5.1] [mysqld-5.5.15] Неверное значение даты и времени: «2011-03-21 11: 23: 48.573000000» для столбца «LastModificationDate» в строке 1

Другие потенциально важные сведения: драйвер соединения - сценарий {MySQL ODBC 5.1 Driver}, запускаемый перед потоком данных - установите sql_mode = 'STRICT_TRANS_TABLES, NO_AUTO_CREATE_USER, NO_ENGINE_SUBSTITUTION, ANSI_QUOTES' Другие столбцы datetime работают с достаточно высокой долей, равной нулю и высокой долеmssql spec: [LastModificationDate] [datetime] NULL mysql spec: LastModificationDate datetime NULL

Кто-нибудь имел опыт работы с этой проблемой и мог бы дать несколько советов по ее решению?

Ответы [ 2 ]

2 голосов
/ 01 марта 2013

У меня такая же сильная головная боль на этой неделе. Я перепробовал много способов. Слава Богу, в конце концов, один из них работал. Надеюсь, это поможет вам немного.

Для некоторых столбцов с типом данных Int, datetime, decimal .... здесь я идентифицировал себя как ColumnA и использовал его как тип datetime.

1.в источнике потока данных, используйте команду SQL для извлечения данных. Sth like select isnull (ColumnA, '1800-01-01') как ColumnA, C1, C2, ... Cn из таблицы Обязательно используйте функцию Isnull для всех столбцов с указанным выше типом данных.

2. Извините pkg службы SSIS. Это должно работать.

3. Вернитесь в Поток управления, в задачу потока данных добавьте элемент управления Задача SQL, чтобы заменить данные обратно. Я имею в виду, обновите ColumnA с «1800-01-01» до нуля снова.

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

2 голосов
/ 08 декабря 2011

Можете ли вы попытаться преобразовать его в строку на стороне сервера SQL в вашем запросе, используя:

convert(char(10),LastModificationDate,111)+' '+convert(char(8),LastModificationDate,108)

Это работает для меня все время.

...