2016-08-23 18 views
2

我在Azure中創建了一個EXTERNAL DATA SOURCE,作爲無法在Azure平臺上創建LINKED SERVERS的替代方法。不同的模式產生錯誤從一個或多個分片中檢索數據。收到的底層錯誤消息是:無效的對象名稱

CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'secretpassword'; 
CREATE DATABASE SCOPED CREDENTIAL LinkedServerCredential 
WITH IDENTITY = 'login_name', SECRET = 'login_password-here'; 

CREATE EXTERNAL DATA SOURCE LinkedProductionDb 
WITH 
(
    TYPE=RDBMS, 
    LOCATION='azure.database.windows.net', 
    DATABASE_NAME='ProductionDb', 
    CREDENTIAL= LinkedServerCredential 
); 

一切都很好,沒有錯誤,併成功執行語句。所以現在我創建一個EXTERNAL TABLE,它具有與駐留在EXTERNAL DATASOURCE中定義的底層數據庫中的表相同的表結構;但我希望它在不同的SCHEMA下分配,以便能夠將其區分爲目標數據庫中的鏈接表。所以我嘗試這個:

CREATE EXTERNAL TABLE [LNK].[Transactions](
    TransactionId BIGINT NOT NULL, 
    CustomerId BIGINT NOT NULL, 
    SubscriptionId BIGINT NOT NULL, 
    ProductId BIGINT NOT NULL, 
    TransType VARCHAR(100), 
    TransKind VARCHAR(100), 
    Success BIT, 
    Amount MONEY, 
    GatewayUsed VARCHAR(100), 
    RecordImportDate DATETIMEOFFSET, 
) 
WITH 
(
    DATA_SOURCE = LinkedProductionDb 
) 
GO 

現在令人驚訝的是,我能夠創建此外部表沒有任何問題;除了當我試圖通過簡單查詢訪問數據時。我收到錯誤:「從一個或多個分片中檢索數據時出錯。收到的基礎錯誤消息是:'無效的對象名'LNK.Transactions'。'。」

它只花了我幾分鐘時間思考我做了什麼,爲什麼我收到了錯誤。顯然,由於原始數據庫中的表格不是在LNK模式下創建的,這是一個無效的對象。

那麼有什麼方法或系統的做法,我可以用來區分我的數據庫中的物理表我的外部表?

很明顯,除其他外,毫無疑問,這是SQL中單獨定義對象作爲LINKED SERVERS的好處之一。

我知道我不能成爲唯一一個看到隔離對象的好處,以清楚地區分它們,如果它們都需要駐留在同一個數據庫中。

回答

1

我通過使用[schema]。[table]在外部服務器上創建一個視圖來實現此目的,我想要將其分離。在你的情況下,你可以使用創建一個名爲[LNK]的視圖。LinkedProductionDb中的[Transactions],然後一切正常。

+0

謝謝,這不是理想的我想到的,但我想它是唯一合理的替代方案。不勝感激! – Mark

+0

好主意。表名也需要相同 - 我試圖將一些命名約定(如'External_Transaction')轉換爲外部表,以便將這些名稱快速標識爲外部表,但我得到了相同的錯誤.. –

相關問題