2013-04-29 52 views
1

我想使用SQL Server OPENQUERY函數從Mysql服務器中提取數據。當我運行一個查詢計數是在thew MySQL服務器記錄我得到的數值沒有問題使用SQL服務器openquery從MySql服務器中提取數據

-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 2013-04-29 17:28:43

+0

@ Question3CPO有效。但我不想將所有我的mysql列從char更改爲varchar!我的大部分表都是char而不是varchar我希望你能幫我完成這個問題,因爲我必須將mysql表保存爲char。謝謝 – Mike 2013-04-29 17:42:42

+0

有沒有一種方法可以在該數據的MySQL上創建重複表,更改重複表上的數據類型,然後將其移至SQL Server,或者不允許?如果是這樣,則重複表可以是SQL Server的參考點,並且可以保留原始表的列類型。 – Question3CPO 2013-04-29 17:48:42

回答

2

演員像這樣的變量工作

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