匯出 (0) 列印
全部展開

USE FEDERATION (Azure SQL Database)

更新日期: 2014年4月

這個主題已過時。您可以在 Transact-SQL 參考 (資料庫引擎) 中找到最新版本。 請參閱 USE FEDERATION (SQL Database)

Important重要事項
目前的同盟實作將汰換 Web 和 Business 服務層。請考慮部署自訂的分區化解決方案以最大化擴充性、靈活性及效能。如需有關自訂分區化的詳細資訊,請參閱向外延展 Azure SQL Database

連接到同盟。

語法慣例 (Azure SQL Database)

USE FEDERATION ROOT
    WITH RESET


USE FEDERATION federation_name (distribution_name = value)
    WITH [FILTERING={ON|OFF},] RESET
[;]

ROOT
指向與同盟根資料庫之間的現有連接。如果連接到同盟成員,則會重設回與同盟根資料庫的連接。當連接到其他任何資料庫時,它沒有任何作用。

federation_name
連接目標的同盟名稱。

distribution_name
這個同盟的同盟金鑰名稱。

value
用來連接到同盟成員的值。服務同盟值的同盟成員會變成此連接所建立之目標的同盟成員。

此值必須符合定義之 federation_name 中同盟所指定的類型。

此值不能是 NULL。

WITH FILTERING=ON|OFF
當此引數未呈現時,篩選會設定為 ON。

當 FILTERING 設定為 OFF 時,連接範圍會設定為包含指定索引鍵值之同盟成員所涵蓋的完整範圍。此連接的行為就像是透過其實體同盟成員名稱 (資料庫名稱) 連接到成員一樣。

當應用程式想要處理同盟成員中的所有資料 (例如,為了掃描整個範圍),而且已經建立邏輯來處理其應用程式中單一不可部分完成之同盟不可部分完成單位執行個體的篩選時,篩選會設定為 OFF。

當 FILTERING 設定為 ON 時,連接範圍會設定為同盟成員中的同盟金鑰例項,而不是同盟成員的完整範圍。在此模式中,查詢處理器會在參考同盟資料表的每一個查詢中,於同盟資料行上加入一個述詞 (fed_column=value)。

當應用程式希望將其存取範圍自動設定為不可部分完成的同盟不可部分完成單位 (例如,僅限 tenant_id 55) 時,篩選會設定為 ON。

WITH RESET
這是讓連接重設明確的必要關鍵字。

USE FEDERATION 陳述式針對現有的連接程式庫提供有效率的連接共用行為,其方式是允許應用程式先連接到包含同盟物件的資料庫,然後透過 USE FEDERATION 陳述式切換到特定的同盟成員。如此可確保用戶端連接集區小於原本要對付個別同盟成員或同盟不可部分完成單位值時的連接集區。

USE FEDERATION 可以在連接之存留期的任何時間點的連接上執行,但它必須是批次內的唯一陳述式而且不支援參數化。

USE FEDERATION 會將目前同盟成員或根資料庫的連接重新連結到同盟根資料庫,或是重新連結到同盟成員內所包含的指定值。當使用 USE FEDERATION 重新連結連接時,就會重新建立連接。因此,所有現有的設定和連接內容都會遺失。這相當於從連接集區擷取連接時執行 sp_reset_connection。

因為 master 資料庫不能包含同盟,所以在 master 資料庫內執行 USE FEDERATION ROOT 沒有任何作用。

搭配不存在的同盟名稱使用 USE FEDERATION 會傳回錯誤,例如「同盟 <同盟名稱> 不存在」。

使用 FILTERING=ON 允許將連接的檢視限制為給定同盟金鑰例項。連接到同盟索引鍵執行個體會將查詢繫結至特定的同盟不可部分完成單位。這樣會藉由引進述詞 P 來修改連接上所發行之查詢的語意。系統會針對給定查詢中的所有同盟資料表插入 P,做為 Federation_Column =@filtering_value

嘗試載入、插入或將資料列移出目前同盟篩選值的任何查詢都是不合法的,而且將會失敗,就像目標資料表上有檢查條件約束來強制執行 P 一樣。

Warning警告
同盟不可部分完成單位確實不是安全性界限。查詢處理器不保證單位之間的資訊不會有任何洩漏情形。有可能範圍之外的資料列會遭到部分處理。任意純量邏輯都可能會在這些資料列上執行,這樣會導致非預期的例外狀況發生,例如溢位或是除以零。

下列程式碼範例中將示範如何將連接路由傳送到同盟根。

using (SqlConnection connection = new SqlConnection(connectionString)) 
{ 
    connection.Open(); 
 
    using (SqlCommand command = connection.CreateCommand()) 
    { 
        // Route the connection to federation root 
        // Note that the CommandText should not contain any additional commends
        command.CommandText = "USE FEDERATION ROOT WITH RESET"; 
        command.ExecuteNonQuery(); 
    } 
}

社群新增項目

新增
顯示:
© 2014 Microsoft