適用於:SQL Server
Azure SQL 受控執行個體
此主題說明如何使用 SQL Server Management Studio 或 Transact-SQL 在 SQL Server 中管理識別欄位。 當訂閱者端的插入資料複寫回發行者時,必須妥善管理識別資料行,以避免在訂閱者與發行者兩端指派相同的識別值。 複寫可以自動管理識別範圍,或者您可以選擇手動處理識別範圍管理。 如需複寫所提供的識別範圍管理相關選項詳細資訊,請參閱複寫識別資料行。
建議
在一個以上發行集中發行資料表時,您必須針對兩個發行集指定相同的識別範圍管理選項。 如需更多資訊,請參閱 發行資料和資料庫物件中的〈在一個以上的出版物中發行資料表〉。
若要建立可用於多個資料表中或可在不參考任何資料表的情況下從應用程式進行呼叫的自動遞增數字,請參閱 序號。
使用 SQL Server Management Studio
在 [新增發行集精靈] 的 發行項屬性 -<發行項 對話方塊的 屬性 索引標籤上,指定識別資料行管理選項。 如需使用此精靈的詳細資訊,請參閱建立發行集。 在「新增發佈精靈」中:
如果在 [發行集類型] 頁面中選取 [合併式發行集] 或 [具更新訂閱的交易式發行集] ,請選取自動或手動識別範圍管理 (依預設為自動,建議使用)。 發行資料表後,將無法修改其屬性,但是可以修改其他相關屬性。
如果選取其他發行集類型,應將識別範圍管理設定為手動。
在 Publication Properties - Publication 對話方塊中可使用的 Article Properties -Article 之 Properties 索引標籤上,修改識別範圍和閾值。 如需有關存取這個對話方塊的詳細資訊,請參閱< View and Modify Publication Properties>。
指定識別欄位管理選項
如果發行者執行的是 SQL Server 2005 (9.x) 之前的 SQL Server 版本,請在 [新增發行集精靈] 的 [發行集類型] 頁面上,選取 [合併發行集] 或 [具更新訂閱的交易式發行集]。
在 [文章] 頁面上,選取具有識別資料行的資料表。
按一下 [文章屬性],然後按一下 [設定反白顯示的資料表項目屬性]。
在 屬性 索引標籤的 文章屬性 - <文章> 對話方塊中,於 識別範圍管理 區段中,將 自動管理識別範圍 屬性設為 自動 或 手動(若發行者執行的是 SQL Server 2005 (9.x) 或更新版本),或設為 True 或 False(若發行者執行的是 SQL Server 2005 (9.x) 之前的 SQL Server 版本)。
如果在步驟 4 中選取了 [自動] 或 [True] ,請在下表中輸入選項的值。 如需如何使用這些設定的詳細資訊,請參閱複寫識別欄位中的<指派識別範圍>一節。
選項 值 描述 發行者範圍大小 範圍大小的整數值 (例如 20000)。 請參閱複寫識別欄位中的<指派識別範圍>一節。 訂閱者範圍大小 範圍大小的整數值 (例如 10000)。 請參閱複寫識別欄位中的<指派識別範圍>一節。 範圍臨界值百分比 臨界值百分比的整數值 (例如 90 相當於 90%)。 在指派新的識別值範圍之前,節點上已使用的所有識別值所占的總百分比。
注意:必須指定此值,但僅供下列訂閱者使用:使用佇列更新訂閱的訂閱者;以及訂閱至合併發行集且執行 SQL Server Compact 或其他較早版本 SQL Server 的訂閱者。 如需詳細資訊,請參閱複寫識別欄位中的<指派識別範圍>一節。[下一個範圍起始值] 整數值。 唯讀。 下一個範圍的開始值。 例如,如果目前範圍是 5001-6000,則該值為 6001。 [最大識別值] 整數值。 唯讀。 識別欄位的最大值。 由資料行的基底資料型別所決定。 遞增 整數值。 唯讀。 每次插入時,識別欄位中的數值應增加或減少的量:通常設為 1。 選取 OK。
若要在資料表發佈後修改識別碼範圍和閾值
在 發行集屬性 - <發行集 對話方塊的 文章 頁面上,選取具有識別資料行的資料表。
按一下 [文章屬性],然後按一下 [設定反白顯示的資料表項目屬性]。
在 [發行項屬性 - 發行項<] 對話方塊的[屬性] 索引標籤上,於 [識別範圍管理] 區段中輸入下列其中一或多個屬性的值:>、[訂閱者範圍大小] 和 [範圍閾值百分比]。
選取 OK。
在 發行屬性 - <發行 對話方塊中,按一下 確定。
使用 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的值。