Skip to content

Zeroplex 生活隨筆

軟體開發、伺服器和生活瑣事

小 縮小字型大小。 中 重設字型大小。 大 放大字型大小。

在 SQL server 建立 Linked Database 連線到 MySQL

Posted on 2021 年 7 月 29 日2021 年 7 月 29 日 By 日落 在〈在 SQL server 建立 Linked Database 連線到 MySQL〉中有 1 則留言

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 的功能設定畫面

確認 MSDASQL 的參數均正確後,在「連結的伺服器」點選右鍵「新增連結的伺服器」開始設定新的連線。在資料來源選項中要注意「提供者 (provider)」必須選擇「ODBC drivers」,資料來源的名稱必須與 ODBC 中的資料來源名稱一致 (注意名稱中的英文大小寫及符號):

圖二:新增連結的伺服器「資料來源」設定

再來切換到「安全性」頁面,這邊要設定的是 ODBC 連線的使用者及密碼。若連線時要使用 ODBC 已經設定好的帳號密碼則選擇「使用登入的目前安全性內容建立」,也可選擇「使用此安全性內容建立」自訂連線要使用的帳號密碼:

圖三:ODBC 帳號登入設定

資料填妥後,按下「確定」即可建立 linked database。

圖四:透過 SSMS 查詢 MySQL 的 test 資料庫資料

最後來說明要如何下 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

參考資料:

  • SQL Server 利用Linked server 連結到 MySQL Server @ 樂於學習、分享、傾聽!!! :: 隨意窩 Xuite日誌
  • Querying remote data sources in SQL Server
Tags:MSSQL

文章導覽

Previous Post: 安裝 MySQL ODBC driver
Next Post: 產生短網址的 string ID

Comment (1) on “在 SQL server 建立 Linked Database 連線到 MySQL”

  1. 求救表示:
    2023 年 9 月 20 日17:15

    不好意思,我按照你所提供的方式執行後,會產生以下錯誤資訊:
    無法初始化連結伺服器 “192.168.1.XXX” 的 OLE DB 提供者 “MSDASQL” 的資料來源物件。
    連結伺服器 “192.168.1.XXX” 的 OLE DB 提供者 “MSDASQL” 傳回訊息 “[Microsoft][ODBC 驅動程式管理員] 找不到資料來源名稱且未指定預設的驅動程式”。 (Microsoft SQL Server, 錯誤: 7303)
    試過網路上的各種方法仍然無法成功,會有甚麼是我忽略掉的嗎

    回覆

發佈留言 取消回覆

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *


其他

關於我  (About me)

小額贊助

  文章 RSS Feed

  留言 RSS Feed

Apache AWS Bash C/C++ Docker FreeBSD GCP Git Google Java JavaScript Laravel Linux Microsoft MSSQL MySQL Nginx PHP PHPUnit PostgreSQL Python Qt Ubuntu Unix Vim Web Windows WordPress XD 作業系統 分享 好站推薦 專題 攝影 新奇搞笑 新聞 旅遊 生活雜記 程式設計 網路架站 網頁設計 資訊學習 資訊安全 遊戲 音樂


創用 CC 授權條款
本著作係採用創用 CC 姓名標示-相同方式分享 4.0 國際 授權條款授權.