在DB同一伺服器, Azure SQL Server仍無法像一般SQL Server直接合併查詢不同資料庫的資料表。

在Azure需先在其中一個DB下,新增外部資料表,才能透過資料表進行查詢。

例如一個新專案建立一個新的資料庫,但需要引用USER資料庫的資料表,這時在新的資料庫建立外部資料表引用USER資料庫的某個資料表,才能在新資料庫合併查詢。

 

1.建立資料庫主要金鑰 MASTER KEY

CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'XXX@XXXXX'

 

2.建立資料庫連線認證

CREATE DATABASE SCOPED CREDENTIAL ConnectToUSERDB WITH 

    IDENTITY = '資料庫帳號', 
    SECRET = '
資料庫密碼';
GO

 

3.建立資料來源

CREATE EXTERNAL DATA SOURCE USERDataSource
WITH
(
    TYPE=RDBMS,
    LOCATION=
'xxxxxx.database.windows.net',
    DATABASE_NAME=
'USERDB', --目的的資料庫名稱
    CREDENTIAL=
ConnectToUSERDB --資料庫連線認證的名稱
);

資料來源建立後,可使用查詢指令確認是否能正常連線。

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

曾經因LOCATION名稱錯誤造成出現錯誤訊息。

Error retrieving data from shard [DataSource=xxxxx.database.windows.net Database=USERDB].  The underlying error message received was: 'A network-related or instance-specific error occurred while establishing a connection to SQL Server. The server was not found or was not accessible. Verify that the instance name is correct and that SQL Server is configured to allow remote connections. (provider: TCP Provider, error: 0 - No such host is known.)'.
 

 

4.建立延伸資料表

建立時,不能有PRIMARY KEY或DEFAULT值。

CREATE EXTERNAL TABLE [dbo].[TB_USER] (
    [Id]           INT           NULL,
    [USER_ID]      NVARCHAR (50) NULL,
    [USER_NAME]    NVARCHAR (50) NULL,
    [USER_DEPT]    NVARCHAR (50) NULL,
    [ROLE]         NVARCHAR (50) NULL
) WITH
(
    DATA_SOURCE=USERDataSource  --資料來源的名稱
)


 

SELECT *
FROM TB_FORM_LIST A
LEFT JOIN TB_USER B ON A.REQUESTER_ID = B.USER_ID

 

 

文章標籤
全站熱搜
創作者介紹
創作者 門外漢 的頭像
門外漢

門外漢的筆記

門外漢 發表在 痞客邦 留言(0) 人氣(118)