Azure SQL Database 要執行跨多個資料庫的查詢,需要建立認證與外部資料表,哪個指令要執行於哪個資料庫,為此篇文章說明重點。
範例資料庫架構說明
在相同或不同的伺服器中建立兩個資料庫:Customers 和 Orders。
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
以上就是完整的建立步驟與測試相關指令。
參考來源:MSDN:開始使用跨資料庫查詢