跨資料庫查詢建構指令全集

阿蘇卡
4 min readMay 22, 2020

--

Photo by Taylor Vick on Unsplash

Azure SQL Database 要執行跨多個資料庫的查詢,需要建立認證與外部資料表,哪個指令要執行於哪個資料庫,為此篇文章說明重點。

範例資料庫架構說明

在相同或不同的伺服器中建立兩個資料庫:CustomersOrders。

Orders 當作主要資料庫,Customers 為外部查詢的資料來源;可以視為身在 Orders 資料庫中,需要取得外部 Customers 資料

建立資料庫範圍的主要金鑰和認證

開啟 SSMS,連接至 Orders 資料庫中,執行以下指令:

粗體字內容表示需因應實際環境置換

CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<master_key_password>';

目的:建立資料加密用的主要金鑰。如果是現存資料庫,應該已經建立,可以略過以上步驟。

CREATE DATABASE SCOPED CREDENTIAL ElasticDBQueryCred
WITH IDENTITY = '<username>', SECRET = '<password>';

以上 username、password 是用來登入 Customers 資料庫的使用者名稱和密碼。也就是將登入 Customers 資料庫的連線資訊存入 Orders 資料庫中

ElasticDBQueryCred 是自訂認證名稱,後續連線時會用到,所以要給一個有意義的名字。

建立後可使用以下指令確認:
SELECT * FROM sys.database_scoped_credentials

刪除此筆認證,使用以下指令:
DROP DATABASE SCOPED CREDENTIAL
ElasticDBQueryCred

建立外部資料來源

CREATE EXTERNAL DATA SOURCE MyElasticDBQuery WITH
(TYPE = RDBMS,
LOCATION = '<server_name>.database.windows.net',
DATABASE_NAME = 'Customers',
CREDENTIAL = ElasticDBQueryCred
) ;

目的:設定如何連線到指定資料庫,跟登入 SSMS 時資料相同,有 資料庫網址、預設資料表,連線帳號密碼使用上一步建立的認證資料,即 ElasticDBQueryCred。

刪除外部資料來源:
DROP EXTERNAL DATA SOURCE MyElasticDBQuery

先確認看看以上步驟是否正確;是否已經可以從 Orders 資料庫中連線至 Customers

EXEC sp_execute_remote
N'MyElasticDBQuery',
N'SELECT DB_NAME()'

sp_execute_remote 可以在指定遠端資料庫上執行指令。

執行後如果有顯示:Customers,表示設定成功了!

建立外部資料表

以下指令要依照位於 Customers 資料庫的資料資料表欄位建立。

CREATE EXTERNAL TABLE [dbo].[CustomerInformation]
(
[CustomerID] [int] NOT NULL,
[CustomerName] [varchar](50) NOT NULL,
[Company] [varchar](50) NOT NULL

)
WITH
(
DATA_SOURCE = MyElasticDBQueryDataSrc
SCHEMA_NAME = N'dbo',
OBJECT_NAME = N'CustomerInformation'
)

刪除外部資料表:
DROP EXTERNAL TABLE [dbo].[
CustomerInformation]

建立完成後,可以在 Orders 資料庫中執行以下指令:

SELECT o.CustomerID, o.OrderId, c.CustomerName, c.Company
FROM OrderInformation AS o
INNER JOIN CustomerInformation AS c
ON c.CustomerID = o.CustomerID

以上就是完整的建立步驟與測試相關指令。

--

--

阿蘇卡
阿蘇卡

Written by 阿蘇卡

後端工程師。記錄下自己開發路上踩過的坑、研究過後的心得,希望對自己好,對其他工程師也好~

No responses yet