Как исправить ошибку синтаксиса SQL ODBC Driver 8.0 в SSIS? - PullRequest
0 голосов
/ 09 февраля 2019

У меня есть пакет служб SSIS, который используется для экспорта данных из базы данных MySQL в базу данных SQL.По какой-то причине я могу читать данные только с использованием элемента «Источник ODBC», но не могу также просмотреть таблицу, хотя, выполняя некоторые другие тесты, я обнаружил, что также не могу вставить данные с элементом «Назначение ODBC».

Всякий раз, когда я пытаюсь получить, я получаю эту ошибку:

ОШИБКА [42000] [MySQL] [Драйвер ODBC 8.0 (w)] [mysqld-5.7.23] У вас есть ошибка в синтаксисе SQL;проверьте руководство, соответствующее вашей версии сервера MySQL, чтобы найти правильный синтаксис для использования рядом с "TABLENAME" в строке 1 (myodbc8w.dll).

Я использую MySQL 5.7.23 и MySQLРазъем / ODBC 8.0.Я пробовал переключаться между разъемами ANSI и Unicode;понижение версии разъемов (пробовал с 5.3, 5.2 и 5.1);изменение базы данных, таблицы и столбца кодификации;изменение режима доступа к данным в элементе источника ODBC (по умолчанию использовалось «имя таблицы»);переделать задачу.Все приводит к одной и той же ошибке, даже на разных компьютерах и базах данных.

РЕДАКТИРОВАТЬ:

Использование второго обходного пути @Hadi приводит к некоторым интересным результатам (первый не сделал 'у меня не работает).

При использовании соединителя ADO.NET или ODBC предоставленный запрос привел к ошибке.

Код ошибки: 1231. Переменная 'sql_mode' can 'установить значение «NO_AUTO_CREATE_USER»

После изменения запроса на

set sql_mode = 'STRICT_TRANS_TABLES, NO_ENGINE_SUBSTITUTION, ANSI_QUOTES'

ошибка сменилась предупреждением.

set sql_mode = 'STRICT_TRANS_TABLES, NO_ENGINE_SUBSTITUTION, ANSI_QUOTES' затронуты 0 строк, 1 предупреждение (я): 3135 'NO_ZERO_DATE', 'NO_ZERO_IN_DATE' и 'режимы ERROR_FOR_Y_ZI_RISO_RIS_O_ZISION следует использовать в строгом режиме.Они будут объединены со строгим режимом в будущем выпуске.

Тем не менее, это работало частично.Любые цитаты, акценты или любые другие символы, окружающие выбранное имя таблицы, должны быть удалены.Это делало его работоспособным при вставке данных, но при извлечении данных это делалось либо с помощью команды SQL, либо путем создания 2 разных соединений.

1 Ответ

0 голосов
/ 10 февраля 2019

При поиске проблемы я нашел несколько полезных ссылок, в которых упоминается обходной путь:

(1) Подключение к проблеме MySQL

В этой ссылке автор упомянул 2 способа подключения к MySQL (используя ODBC и ADO.net).Он упомянул, что при попытке извлечь таблицы с использованием ODBC он получил ту же ошибку, что и вы, перечисленные в вопросе, и упомянул решение, приведенное ниже:

Переключение на использование запроса SQL вместо этого, и чтоработал просто отлично.Мне удалось вернуть оба правильных метаданных, с одной маленькой проблемой - столбцы varchar (50) вернулись с длиной 51. Это привело к некоторым предупреждениям, но пакет работал правильно.

(2) Запись в MySQL проблема

В этой статье автор упоминал, как писать вНазначение MySQL с использованием назначения ADO.Net, он упомянул решение ниже:

Для правильной работы назначения ADO.NET в базе данных MySQL должна быть включена опция ANSI_QUOTES SQL_MODE.Эта опция может быть включена глобально или для определенного сеанса.Чтобы включить его для одного сеанса:

  1. Создайте диспетчер соединений ADO.NET, который использует драйвер ODBC
  2. Установите для свойства RetainSameConnection диспетчера соединений значение True
  3. Добавьте Execute SQL Task перед потоком данных, чтобы установить SQL_MODE - Пример.set sql_mode='STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION,ANSI_QUOTES'
  4. Убедитесь, что ваша задача «Выполнение SQL» и ваш ADO.NET Destination используют один и тот же диспетчер соединений.

Другие похожие ссылки

...