2012-04-27 48 views
0

我一直在使用ODBC驅動程序與下面的供應商串插入錯誤服務器的MySQL

DRIVER={MySQL ODBC 5.1 Driver};SERVER=HOST;USER=uid;PASSWORD=pw;OPTION=3 

我的鏈接服務器被命名爲MYSQL創建鏈接的服務器。如果我做的選擇和更新,因爲它的工作方式正確

SELECT * FROM OPENQUERY(MYSQL,'SELECT * FROM DatabaseName.Table') 
UPDATE OPENQUERY(MYSQL, 'SELECT * FROM DatabaseName.Table where test=0') SET test=1 

當我嘗試用下面的語法

INSERT OPENQUERY(MYSQL,'SELECT Column1, Column2, Column3 from DatabaseName.Table WHERE 1=0') VALUES (10,20,30) 

我有這個以下錯誤

The OLE DB provider "MSDASQL" for linked server "MYSQL" could not INSERT INTO table "[MSDASQL]". Commands out of sync; you can't run this command now. 
+1

解決創造了這樣我的鏈接服務器: EXEC master.dbo.sp_addlinkedserver @服務器= 'MYSQL',@ srvproduct = 'MySQL的', @供應商= 'MSDASQL',@ provstr ='DRIVER = {MySQL的ODBC 5.1 驅動}; SERVER = HOST;端口= 3306; USER = UID; PASSWORD = PW; OPTION = 3; DATABASE = MYDB; – 2012-04-27 09:34:28

回答

0

我想執行插入你在另一個論壇上遇到了與this thread相同的問題。從似乎已經解決了那裏的人的問題的答案,它看起來像您的提供程序字符串中缺少數據庫名稱。嘗試將DATABASE=mydb;添加到您的提供商字符串中。

原來這裏是答案:

很顯然,如果你嘗試使用Studio和 各種菜單創建鏈接的服務器,一個小細節沒有被保存在連接字符串中, 這是數據庫!

EXEC master.dbo.sp_addlinkedserver @server='MYSQL', @srvproduct='MySQL', 
@provider='MSDASQL', @provstr='DRIVER={MySQL ODBC 5.1 
Driver};SERVER=HOST;Port=3306;USER=uid;PASSWORD=pw;OPTION=3;DATABASE=mydb; 

ODBC驅動程序的bug似乎隻影響INSERT語句 並一直圍繞2008年以來...我本來希望,MySQL的現在固定 它...

後您使用上述步驟創建鏈接服務器, 插入和其他所有工作一樣!

+0

是的,它是...閱讀我的評論 – 2012-04-27 09:39:41

+1

@Luigi看起來你發佈評論大約在同一時間我貼我的答案。在將來問你的問題後,如果你自己解決問題,請添加決議作爲答案並接受它。這樣,其他用戶就不會試圖回答你的問題,同樣的問題的人可以找到答案,而無需在你的評論中挖掘。 – Bridge 2012-04-27 09:50:25

+1

@Luigi所以,現在請標記此問題解決,通過張貼您的答案作爲一個新的答案並接受它,或接受我的答案。 – Bridge 2012-04-27 09:51:57

0

我剛剛經歷了同樣的問題,並設法通過停用Force use of forward-only cursorDon't cache results for forward-only cursor我的ODBC連接來解決這個問題。

我不知道,如果這兩個選項需要禁用。我得到了暗示here

我通過My​​SQL ODBC/Connector v5.1.11,64位將SQL Server 2012連接到MySQL v5.1。我的鏈接數據源配置爲使用系統ODBC DSN其中已經有指定的MySQL數據庫(這是相對於以前的答案),但我還是停用這些光標選項(默認情況下,他們沒有爲新啓用之前得到了錯誤數據來源,我是在某個時候啓用它們的人)。