我在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的好處之一。
我知道我不能成爲唯一一個看到隔離對象的好處,以清楚地區分它們,如果它們都需要駐留在同一個數據庫中。
謝謝,這不是理想的我想到的,但我想它是唯一合理的替代方案。不勝感激! – Mark
好主意。表名也需要相同 - 我試圖將一些命名約定(如'External_Transaction')轉換爲外部表,以便將這些名稱快速標識爲外部表,但我得到了相同的錯誤.. –