管理識別欄位
本主題描述如何使用 SQL Server Management Studio 或 Transact-SQL,在 SQL Server 2012 中管理識別欄位。 當訂閱者插入複寫回發行者時,必須管理識別欄位,以免在訂閱者和發行者上指派相同的識別值。 複寫可以自動管理識別範圍,或者您可以選擇手動處理識別範圍管理。 如需有關複寫提供之識別範圍管理選項的詳細資訊,請參閱<複寫識別欄位>。
本主題內容
開始之前:
建議
若要管理識別欄位,請使用:
SQL Server Management Studio
Transact-SQL
開始之前
建議
在一個以上發行集中發行資料表時,您必須針對兩個發行集指定相同的識別範圍管理選項。 如需詳細資訊,請參閱<發行資料和資料庫物件>中的「在多個發行集中發行資料表」。
若要建立可用於多個資料表中或可在不參考任何資料表的情況下從應用程式進行呼叫的自動遞增數字,請參閱<序號>。
[Top]
使用 SQL Server Management Studio
在「新增發行集精靈」的 [發行項屬性 - <Article>] 對話方塊的 [屬性] 索引標籤中,指定識別欄位管理選項。 如需有關使用這個精靈的詳細資訊,請參閱<建立發行集>。 在「新增發行集精靈」中:
如果在 [發行集類型] 頁面中選取 [合併式發行集] 或 [具更新訂閱的交易式發行集],請選取自動或手動識別範圍管理 (依預設為自動,建議使用)。 發行資料表後,將無法修改其屬性,但是可以修改其他相關屬性。
如果選取其他發行集類型,應將識別範圍管理設定為手動。
在 [發行項屬性 - <Article>] 的 [屬性] 索引標籤中,修改識別範圍和臨界值,在 [發行集屬性 - <Publication>] 對話方塊中可用。 如需有關存取這個對話方塊的詳細資訊,請參閱<檢視及修改發行集屬性>。
若要指定識別欄位管理選項
如果「發行者」在 SQL Server 2005 之前的 SQL Server 版本上執行,請在「新增發行集精靈」的 [發行集類型] 頁面中,選取 [合併式發行集] 或 [具更新訂閱的交易式發行集]。
在 [發行項] 頁面中,選取具有識別欄位的資料表。
按一下 [發行項屬性],然後按一下 [設定反白顯示資料表發行項的屬性]。
在 [發行項屬性 - <Article>] 對話方塊的 [屬性] 索引標籤中,於 [識別範圍管理] 區段內將 [自動管理識別範圍] 屬性設定為 [自動] 或 [手動] (適用於在 SQL Server 2005 或更新版本上執行的發行者),或設定為 [True] 或 [False] (適用於在 SQL Server 2005 之前的 SQL Server 版本上執行的發行者)。
如果在步驟 4 中選取了 [自動] 或 [True],請在下表中輸入選項的值。 如需如何使用這些設定的詳細資訊,請參閱<複寫識別欄位>中的「指派識別範圍」一節。
選項
值
說明
發行者範圍大小
範圍大小的整數值 (例如 20000)。
請參閱<複寫識別欄位>中的「指派識別範圍」。
訂閱者範圍大小
範圍大小的整數值 (例如 10000)。
請參閱<複寫識別欄位>中的「指派識別範圍」。
範圍臨界值百分比
臨界值百分比的整數值 (例如 90 相當於 90%)。
指派新的識別範圍之前,節點處所用的識別值總計百分比。
[!附註]
必須指定這個值,但只能由下列人員使用:使用佇列更新訂閱的訂閱者;以及執行 SQL Server Compact 或其他舊版 SQL Server 之合併式發行集的訂閱者。 如需詳細資訊,請參閱<複寫識別欄位>中的「指派識別範圍」一節。
[下一個範圍起始值]
整數值。 唯讀。
下一個範圍的開始值。 例如,如果目前範圍是 5001-6000,則該值為 6001。
[最大識別值]
整數值。 唯讀。
識別欄位的最大值。 由資料行的基底資料型別決定。
[遞增]
整數值。 唯讀。
每次插入時,應增加或是減少的識別欄位的值數量:通常設定為 1。
按一下 [確定]。
若要在發行資料表後修改識別範圍和臨界值
在 [發行集屬性 - <Publication>] 對話方塊中的 [發行項] 頁面,選取具有識別欄位的資料表。
按一下 [發行項屬性],然後按一下 [設定反白顯示資料表發行項的屬性]。
在 [發行項屬性 - <Article>] 對話方塊中 [屬性] 索引標籤的 [識別範圍管理] 區段內,為下列其中一個或多個屬性輸入值:[發行者範圍大小]、[訂閱者範圍大小] 和 [範圍臨界值百分比]。
按一下 [確定]。
按一下 [發行集屬性 - <Publication>] 對話方塊上的 [確定]。
[Top]
使用 Transact-SQL
您可以在建立發行項時,使用複寫預存程序來指定識別範圍管理選項。
在針對交易式發行集定義發行項時,啟用自動識別範圍管理
在發行集資料庫的發行者上,執行 sp_addarticle。 如果發行的來源資料表有識別欄位,請針對 @identityrangemanagementoption 指定 auto 的值、針對 @pub_identity_range 指定指派給發行者的識別值範圍、針對 @identity_range 指定指派給每一個訂閱者的識別值範圍,以及針對 @threshold 指定在指派新的識別範圍之前所使用的總識別值百分比。 如需有關定義發行項的詳細資訊,請參閱<定義發行項>。
[!附註]
請確定識別欄位的資料類型夠大,足以支援指派給所有訂閱者的識別總範圍。
在針對交易式發行集定義發行項時,停用自動識別範圍管理
在發行集資料庫的發行者上,執行 sp_addarticle。 針對 @identityrangemanagementoption 指定 manual 的值。 如需有關定義發行項的詳細資訊,請參閱<定義發行項>。
在訂閱者上指派識別發行項欄位的範圍,以免產生更新訂閱者的衝突。 如需詳細資訊,請參閱<複寫識別欄位>主題中的<為手動識別範圍管理指派範圍>一節。
在針對合併式發行集定義發行項時,啟用自動識別範圍管理
在發行集資料庫的發行者上,執行 sp_addmergearticle。 如果發行的來源資料表有識別欄位,請針對 @identityrangemanagementoption 指定 auto 的值、針對 @pub_identity_range 指定指派給伺服器訂閱的識別值範圍、針對 @identity_range 指定指派給發行者和每一個用戶端訂閱的識別值範圍,以及針對 @threshold 指定在指派新的識別範圍之前所使用的總識別值百分比。 如需有關要指派哪些新識別範圍的詳細資訊,請參閱<複寫識別欄位>主題中的「指派識別範圍」。 如需有關定義發行項的詳細資訊,請參閱<定義發行項>。
[!附註]
請確定識別欄位的資料類型夠大,足以支援指派給所有訂閱者的識別總範圍,特別是具有伺服器訂閱的訂閱者
在針對合併式發行集定義發行項時,停用自動識別範圍管理
在發行集資料庫的發行者上,執行 sp_addmergearticle。 針對 @identityrangemanagementoption 指定下列其中一個值:
manual - 必須手動指派識別範圍來更新訂閱者。
none - 發行者上的識別欄位將不會定義為訂閱者上的識別欄位。
如需有關定義發行項的詳細資訊,請參閱<定義發行項>。
在訂閱者上指派識別發行項欄位的範圍,以免產生更新訂閱者的衝突。
針對快照式或交易式發行集中的現有發行項,變更自動識別範圍管理設定
在發行集資料庫的發行者上,執行 sp_helparticle,並記下結果集中 identityrangemanagementoption 的值。 如果此值為 0,不會啟用自動識別範圍管理。
如果結果集中 identityrangemanagementoption 的值為 1,請依照以下方式變更設定:
若要變更指派的識別範圍,請在發行集資料庫的發行者上,執行 sp_changearticle。 針對 @property 指定 identity_range 或 pub_identity_range 的值,以及針對 @value 指定新的範圍值。
若要變更指派新範圍的臨界值,請在發行集資料庫的發行者上,執行 sp_changearticle。 針對 @property 指定 threshold 的值,並針對 @value 指定新的臨界值。
針對合併式發行集中的現有發行項,變更自動識別範圍管理設定
在發行集資料庫的發行者上,執行 sp_helpmergearticle,並記下結果集中 identity_support 的值。 如果此值為 0,不會啟用自動識別範圍管理。
如果結果集中 identity_support 的值為 1,請依照以下方式變更設定:
若要變更指派的識別範圍,請在發行集資料庫的發行者上,執行 sp_changemergearticle。 針對 @property 指定 identity_range 或 pub_identity_range 的值,以及針對 @value 指定新的範圍值。
若要變更指派新範圍的臨界值,請在發行集資料庫的發行者上,執行 sp_changemergearticle。 針對 @property 指定 threshold 的值,並針對 @value 指定新的臨界值。 如需有關要指派哪些新識別範圍的詳細資訊,請參閱<複寫識別欄位>主題中的「指派識別範圍」。
若要停用自動識別範圍管理,請在發行集資料庫的發行者上,執行 sp_changemergearticle。 針對 @property 指定 identityrangemanagementoption 的值,以及針對 @value 指定 manual 或 none 的值。
[Top]