2013-04-29 3 views
1

Я пытаюсь извлечь данные с сервера Mysql с помощью функции OPENQUERY SQL-сервера. Когда я запускаю запрос для подсчета записей, которые находятся в таял сервере MySQL я получить значение не проблемавытаскивание данных с сервера MySql с использованием SQL-сервера openquery

-this query works and it return the total records found 
SELECT count(*) AS total FROM OPENQUERY(LinkedServer, 'SELECT * FROM mydb_name.users') 

Но когда я

SELECT login_user FROM OPENQUERY(LinkedServer, 'SELECT * FROM mydb_name.users') 

Я получаю эту ошибку

Msg 7347, Level 16, State 1, Line 1 
OLE DB provider 'MSDASQL' for linked server 'LinkedServer' returned data that does not match expected data length for column '[MSDASQL].login_user'. The (maximum) expected data length is 60, while the returned data length is 16. 

Я пробовал, но не работал

SELECT CONVERT(CHAR(60), login_user) AS name FROM OPENQUERY(LASWEB, 'SELECT * FROM mydb_name.users') 

Я предполагаю, что это вопрос типа данных, но как я могу его использовать? Как я могу получить данные, которые мне нужны?

Благодаря

+0

Вы пробовали это - http://stackoverflow.com/questions/4215979/problem-with-select-in-mysql-through- odbc-from-microsoft-sql-server: «[в ответе] ... перейдите на сервер MySQL и измените тип данных на varchar(), оставив длину как есть ... Пример, char (10) изменить его на varchar (10) «. – Question3CPO

+0

@ Question3CPO Это сработало. Но я не хочу менять все мои столбцы mysql от Char до varchar! Большинство моих таблиц - char, а не varchar. Я хочу, чтобы вы помогли мне закончить эту проблему, поскольку я должен поддерживать таблицу mysql как char. Спасибо – Mike

+0

Есть ли способ создать дублирующую таблицу в MySQL этих данных, изменить тип данных в дублирующей таблице, а затем перенести его на SQL Server или это не разрешено? Если это так, дублирующаяся таблица может быть точкой отсчета для SQL Server, и вы можете сохранить типы столбцов исходной таблицы. – Question3CPO

ответ

2

В ролях переменной как и работал

SELECT login_user FROM OPENQUERY(LASWEB, 'SELECT CAST(u.login_user AS CHAR) AS login_user FROM mydb_name.users AS u')