SQL server 並不支援 MySQL 連線或查詢,但可以透過 ODBC 和 SQL server 的「Linked Database」功能將 query 轉送至 MySQL 執行。
SQL server 是透過 MSDASQL 功能來與 ODBC 連線,所以建立連線前要先做好 ODBC 資料來源設定和 MSDASQL 的設定。ODBC 的 MySQL 來源設定可以參考弊站稍早「安裝 MySQL ODBC driver」的說明,MSDASQL 的設定必須先透過 SSMS 的 sa 帳號,從「物件總管」=>「伺服器物件」=>「連結的伺服器」=>「提供者」=>「MSDASQL」點選右鍵,檢視「屬性」,檢查是否需要特殊的設定 (一般用途使用預設值即可):
確認 MSDASQL 的參數均正確後,在「連結的伺服器」點選右鍵「新增連結的伺服器」開始設定新的連線。在資料來源選項中要注意「提供者 (provider)」必須選擇「ODBC drivers」,資料來源的名稱必須與 ODBC 中的資料來源名稱一致 (注意名稱中的英文大小寫及符號):
再來切換到「安全性」頁面,這邊要設定的是 ODBC 連線的使用者及密碼。若連線時要使用 ODBC 已經設定好的帳號密碼則選擇「使用登入的目前安全性內容建立」,也可選擇「使用此安全性內容建立」自訂連線要使用的帳號密碼:
資料填妥後,按下「確定」即可建立 linked database。
最後來說明要如何下 T-SQL 來查詢 linked database 的資料。有趣的是官方文件找不到詳細的說明,是因為使用 SQL server 的使用者都習慣透過 GUI 工具來操作嗎? XD
先來看一下最基礎的語法:
SELECT * from MYTEST...users GO
T-SQL 可以在 from
語句設定要查詢的資料的對象,上面的語法的意思是「使用 MYTEST resource 中的第一個資料庫的 users 資料表中查詢」,從圖四可以看到預設的資料庫是 test。若可使用的資料庫有超過一個時,則在 SSMS 顯示出來的列表中第一個資料庫中進行查詢。
若要改用 report
資料庫,則查詢語句應更改如下:
SELECT * from MYTEST.report..users GO
另外嘗試時有遇到一些錯誤訊息,看起來和 ODBC 和 MSDASQL 這幾個 prodiver 有關,問題還沒有找到:
訊息 7399,層級 16,狀態 1,行 2 連結伺服器 "MYTEST" 的 OLE DB 提供者 "MSDASQL" 報告了錯誤。提供者並未給予任何關於錯誤的資訊。 訊息 7312,層級 16,狀態 1,行 2 不能使用連結伺服器 "MYTEST" 的 OLE DB 提供者 "MSDASQL" 的結構描述或目錄。提供了四部分的名稱,但提供者並未公開必要的介面,以使用目錄或結構描述。
另一個查詢 linked database 的語法,是使用 T-SQL 的 openquery() 函式來取代原本 from 的語句:
SELECT * FROM openquery( MYTEST, 'SELECT * FROM test.users' ) as m GO
參考資料:
不好意思,我按照你所提供的方式執行後,會產生以下錯誤資訊:
無法初始化連結伺服器 “192.168.1.XXX” 的 OLE DB 提供者 “MSDASQL” 的資料來源物件。
連結伺服器 “192.168.1.XXX” 的 OLE DB 提供者 “MSDASQL” 傳回訊息 “[Microsoft][ODBC 驅動程式管理員] 找不到資料來源名稱且未指定預設的驅動程式”。 (Microsoft SQL Server, 錯誤: 7303)
試過網路上的各種方法仍然無法成功,會有甚麼是我忽略掉的嗎