перенос таблицы из MySQL в MSSQL завершается неудачно

0

Я пытаюсь перенести таблицу из MySQL в MSSQL с помощью средства переноса данных в студии MS SQL Management. Я использую провайдер .net для odbc и выбираю tabel и пытаюсь сделать tansfer. Но есть получение общих таблиц в базе данных, но когда я пытаюсь передать, это дает ошибку. Даже когда я пытаюсь просмотреть данные, он говорит:

the preview data could not be retrieved.
Additional Information:
Error [42000].... there is an error near line 1 ( myodbc5.dll).

Есть ли что-то не так?

Я загрузил драйверы с сайта MySQL, и я попытался переустановить их более 10 раз.

Мне ничего не хватает?

Пожалуйста, помогите мне.

  • 0
    Какую строку подключения вы используете для подключения ODBC?
  • 0
    Если окажется, что это проблема строки подключения, попробуйте посмотреть на этом сайте: connectionstrings.com
Показать ещё 1 комментарий
Теги:
sql-server

1 ответ

1
Лучший ответ

На ваш пост может быть несколько проблем. Я бы рекомендовал разбить устранение неполадок на следующие шаги:

  • Попытайтесь подключиться к серверу в инструменте, отличном от Management Studio и SSIS, чтобы узнать, работает ли ваше соединение ODBC. Я бы рекомендовал использовать Toad for MySQL от Quest Software. Он бесплатный и имеет аналогичный интерфейс для Studio Management.

  • После правильного подключения к серверу попробуйте запросить данные, чтобы убедиться, что у вас есть соответствующие разрешения.

  • Выполняйте шаги 1 и 2 во время входа на сервер, которому необходимо подключиться к базе данных MySQL. На сервере могут возникать различные проблемы с подключением, чем на рабочем столе. Например, сервер может быть защищен по-разному в домене или у вас может быть проблема совместимости с драйверами на сервере, которая не существует на рабочем столе.

  • Попробуйте настроить соединение связанного сервера, используя соединение ODBC. На одном сервере мы обнаружили, что мы могли бы успешно заставить это работать, но мы не смогли заставить SSIS правильно играть с ODBC-соединением. В худшем случае вы можете использовать SSIS для выполнения связанного запроса сервера, чтобы передать данные через вызов хранимой процедуры. Здесь пример соединения Linked Server, который работал для нас в этом случае.

    EXEC master.dbo.sp_addlinkedserver @server = N'Some_MySQL_Server_Name ', @srvproduct = N'MySQLDatabase', @provider = N'MSDASQL ', @datasrc= N'Some_ODBC_Name'

    EXEC master.dbo.sp_addlinkedsrvlogin @rmtsrvname = N'Some_MySQL_Server_Name ', @useself = N'False', @locallogin = NULL, @rmtuser = NULL, @rmtpassword = NULL

    ГО

    EXEC master.dbo.sp_serveroption @server = N'Some_MySQL_Server_Name ', @optname = N'collation compatible', @optvalue = N'false ' GO

    EXEC master.dbo.sp_serveroption @server = N'Some_MySQL_Server_Name ', @optname = N'data access', @optvalue = N'true ' GO

    EXEC master.dbo.sp_serveroption @server = N'Some_MySQL_Server_Name ', @optname = N'dist', @optvalue = N'false ' GO

    EXEC master.dbo.sp_serveroption @server = N'Some_MySQL_Server_Name ', @optname = N'pub', @optvalue = N'false ' GO

    EXEC master.dbo.sp_serveroption @server = N'Some_MySQL_Server_Name ', @optname = N'rpc', @optvalue = N'false ' GO

    EXEC master.dbo.sp_serveroption @server = N'Some_MySQL_Server_Name ', @optname = N'rpc out', @optvalue = N'false ' GO

    EXEC master.dbo.sp_serveroption @server = N'Some_MySQL_Server_Name ', @optname = N'sub', @optvalue = N'false ' GO

    EXEC master.dbo.sp_serveroption @server = N'Some_MySQL_Server_Name ', @optname = N'connect timeout', @optvalue = N'0 ' GO

    EXEC master.dbo.sp_serveroption @server = N'Some_MySQL_Server_Name ', @optname = N'collation name', @optvalue = null GO

    EXEC master.dbo.sp_serveroption @server = N'Some_MySQL_Server_Name ', @optname = проверка правильности N'lazy', @optvalue = N'false ' GO

    EXEC master.dbo.sp_serveroption @server = N'Some_MySQL_Server_Name ', @optname = N'query timeout', @optvalue = N'0 ' GO

    EXEC master.dbo.sp_serveroption @server = N'Some_MySQL_Server_Name ', @optname = N'use remote collation', @optvalue = N'true ' GO

    EXEC master.dbo.sp_serveroption @server = N'Some_MySQL_Server_Name ', @optname = N'remote proc promotion promotion', @optvalue = N'true ' GO

  • В потоке данных SSIS должен использоваться источник ADO.NET. Не полагайтесь на режим доступа к "таблице или виду". Вместо этого используйте команду SQL. Я заметил, что в SSIS часто возникают проблемы с чтением метаданных, и вам может понадобиться CAST некоторые из полей для решения этой проблемы. Иногда это делает колонку длинной или слишком короткой. Обратите внимание на типы данных в источнике, чтобы узнать, как SSIS может удалять длины. Я не помню, что вызывает это, но, похоже, это относится к типам nullability и string, если моя память правильная. Я бы рекомендовал отправить его адресату для чтения данных и использовать средство просмотра данных для просмотра данных, чтобы убедиться, что они выглядят правильно. Вам также может потребоваться добавить шаг преобразования данных между источником и получателем для преобразования из Unicode в не-Юникод.

Если вы определяете проблему с подключением ODBC, вы можете попробовать следующие настройки:

  • Флаги 1: возвращать сопоставленные строки вместо затронутых строк; Разрешить большие наборы результатов; Использовать сжатие; Обработать столбцы BIGINT как столбцы INT.

  • Флаги 2: Не проговаривайте при подключении.

  • Флаги 3: включить имя таблицы в SQLDescribeCol(); Отключите поддержку транзакций. Debug: регистрирует запросы к myodbc.sql.

  • Настройки SSL: оставьте поле пустым, если оно не закончилось SSL.

Нажав "Тест", вы должны вернуть Connection Successful. Если это сработает, тогда вы сможете заставить Toad для MySQL работать с ним.

Если вы переходите по пути Linked Server, то убедитесь, что имя ODBC соответствует точно определенному источнику данных. Я считаю, что мы обнаружили, что это чувствительно к регистру, но я не совсем уверен.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню