SSIS и MySQL - проблема с разделителем имен таблиц

Я пытаюсь вставить строки в базу данных MySQL из базы данных Access с помощью SQL Server 2008 SSIS.

TITLE: Microsoft SQL Server Management Studio
------------------------------

ERROR [42000] [MySQL][ODBC 5.1 Driver][mysqld-5.0.51a-community-nt]You have 
an error in your SQL syntax; check the manual that corresponds to your MySQL 
server version for the right syntax to use near '"orders"' at line 1

Проблема с разделителями. Я использую драйвер ODBC 5.1, могу подключиться к MySql и выбрать таблицу из целевого источника данных ADO.Net. Все таблицы MySql отображаются в редакторе пакетов SSIS с разделителями в двойных кавычках:

"shipto addresses"

Удаление двойных кавычек из текстового поля «Использовать таблицу или представление» в редакторе назначения ADO.NET или их замена чем-то другим не работает, если в имени таблицы есть пробел. Когда SSIS объединяет запрос Insert, он сохраняет двойные кавычки и добавляет одинарные кавычки.

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

Кажется, я не могу контролировать это поведение. Какие-либо предложения? Другие типы пакетов, в которых я могу вручную кодировать SQL, не имеют этой проблемы.


person cdonner    schedule 16.10.2009    source источник


Ответы (4)


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

Решение состоит в том, чтобы повторно использовать соединение для всех задач и включить кавычки ANSI для соединения, прежде чем делать какие-либо вставки, с помощью задачи Execute Sql, которая выполняет следующее:

set sql_mode='STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,
     NO_ENGINE_SUBSTITUTION,ANSI_QUOTES' 
person cdonner    schedule 23.10.2009

Попробуйте заключить имена таблиц в квадратные скобки. Это может помочь.

РЕДАКТИРОВАТЬ: Если вы можете, я бы создал представления (без пробелов) на основе таблиц доступа и использовал их для экспорта. Даже если это означает создание еще одной базы данных Access со связанными таблицами, я думаю, что это ваш лучший выбор.

person Community    schedule 16.10.2009
comment
Другие разделители, кроме двойных кавычек, не принимаются SSIS. Если в имени таблицы нет пробела, разделитель не работает. Я пробовал все что угодно. - person cdonner; 17.10.2009

Мне всегда было сложно напрямую использовать SSIS с MYSQL. Даже после установки драйверов ODBC они просто не работают в потоках данных. Я всегда заканчивал тем, что создавал связанные ODBC-соединения между SQL Server и MYSQL. Затем я полагаюсь на запросы связанного сервера для передачи данных. Вместо использования задачи потока данных SSIS я использую команду Execute SQL, обычно в форме хранимой процедуры, которая выполняет OPENQUERY.

Одно из возможных решений - загрузить данные в базу данных SQL Server и использовать их в качестве промежуточной среды перед загрузкой в ​​базу данных MYSQL. Я регулярно перемещаю данные между SQL Server 2008 и MYSQL, а в прошлом я использовал для регулярного перемещения данных между Access и SQL Server.

Другое возможное решение - преобразовать входящие данные Access до их загрузки в базу данных MYSQL. Это может дать вам возможность очистить имена столбцов и фактические данные, которые проходят в MYSQL.

Сообщите мне, работает ли что-то из этого для вас.

person Registered User    schedule 16.10.2009
comment
Неправильное имя таблицы находится в MySql, а не в доступе, и у меня нет контроля над этой схемой. Этот процесс должен выполняться регулярно и как можно более автономно, и размещение данных в SQL Server немного усложнит эту задачу. Я рекомендовал клиенту заменить таблицу представлением в MySQL и переименовать таблицу так, чтобы SSIS могла работать. Такое изменение не должно влиять на какие-либо последующие системы или существующие запросы к базе данных MySQL. - person cdonner; 18.10.2009

Вы можете найти файл настроек конфигурации my.ini в <<Drive>>:\ProgramData\MySQL\MySQL Server 5.6\my.ini и добавить «ANSI_QUOTES» в sql-режим.

например: sql-mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION,ANSI_QUOTES". Это должно решить проблему при предварительном просмотре в редакторе SSIS.

person Girija Acharya    schedule 20.10.2013