管理标识列

本主题介绍如何使用 SQL Server Management Studio 或 Transact-SQL 管理 SQL Server 2014 中的标识列。 当订阅服务器上的插入操作复制回发布服务器时,必须管理标识列以避免在订阅服务器和发布服务器上分配相同的标识值。 复制可以自动管理标识范围,也可以选择手动处理标识范围管理。 有关复制提供的标识范围管理选项的信息,请参阅 “复制标识列”。

在您开始之前

建议

  • 在多个发布中发布表时,必须为这两个发布指定相同的标识范围管理选项。 有关详细信息,请参阅 发布数据和数据库对象中的“在多个发布中发布表”。

  • 若要创建可在多个表中使用的自动递增数字,或者在不引用任何表的情况下从应用程序调用的数字,请参阅 序列号

使用 SQL Server Management Studio

在新建发布向导的“文章属性 -<文章>”对话框的“属性”选项卡上指定标识列管理选项。 有关使用此向导的详细信息,请参阅 “创建发布”。 在“新发布向导”中:

  • 如果在发布类型页上选择“合并发布”“可更新订阅的事务发布”,请选择“自动”或“手动”标识范围管理(推荐使用默认的“自动”)。 发布表后,无法修改该属性,但可以修改其他相关属性。

  • 如果选择其他发布类型,应将标识范围管理设置为手动。

修改项目属性 -<Article> 的“属性”选项卡上的标识范围和阈值,该选项卡在“发布属性 - <发布>”对话框中可用。 有关访问此对话框的详细信息,请参阅 “查看和修改发布属性”。

指定标识列管理配置

  1. 如果发布服务器运行的是早于 SQL Server 2005 的 SQL Server 版本,请在“新建发布向导”的 发布类型 页面上,选择 “合并发布”“含更新订阅的事务发布”

  2. 在“ 文章 ”页上,选择具有标识列的表。

  3. 单击“ 项目属性”,然后单击“ 设置突出显示的表项目的属性”。

  4. 属性选项卡的文章属性 - <文章>对话框中,在标识范围管理部分中,将自动管理标识范围属性设置为自动手动(对于运行 SQL Server 2005 或更高版本的发布服务器),或TrueFalse(对于运行 SQL Server 2005 之前的 SQL Server 版本的发布服务器)。

  5. 如果在步骤 4 中选择了 “自动 ”或“ True ”,请为下表中的选项输入值。 有关如何使用这些设置的详细信息,请参阅 复制标识列的“分配标识范围”部分。

    选项 价值 DESCRIPTION
    发布者范围大小 范围大小的整数值(例如 20000)。 请参阅 复制标识列的“分配标识范围”部分。
    订阅者范围大小 范围大小的整数值(例如 10000)。 请参阅 复制标识列的“分配标识范围”部分。
    范围阈值百分比 百分比阈值的整数值(例如,90 等于 90%)。 在分配新的标识范围之前,节点中使用的标识值总数的百分比。

    注意:此值必须指定,但只能由以下订阅者使用:使用排队更新订阅的订阅者;以及运行 SQL Server Compact 或其他 SQL Server 版本(早期版本)进行合并发布的订阅者。 有关详细信息,请参阅 复制标识列的“分配标识范围”部分。
    下一个范围起始值 整数值。 只读。 下一个范围开始的值。 例如,如果当前范围为 5001-6000,则此值将为 6001。
    最大标识值 整数值。 只读。 标识列的最大值。 由列的基数据类型确定。
    增量 整数值。 只读。 标识列中的数字应为每个插入增加或减少的量:通常设置为 1。
  6. 单击 “确定”

在发布表后修改标识范围和阈值

  1. “发布属性 - <发布>”对话框的“文章”页上,选择具有标识列的表。

  2. 单击“ 项目属性”,然后单击“ 设置突出显示的表项目的属性”。

  3. 在“属性”选项卡的“文章属性 - <文章>”对话框的“标识范围管理”部分中,输入以下一个或多个属性的值:发布者范围大小订阅者范围大小范围阈值百分比

  4. 单击 “确定”

  5. 单击“>”对话框上的“确定”。

使用 Transact-SQL

创建项目时,可以使用复制存储过程指定标识范围管理选项。

为事务性发布定义文章时启用自动身份范围管理

  1. 在发布服务器上,对发布数据库执行 sp_addarticle。 如果发布的源表具有标识列,请为@identityrangemanagementoption指定auto值,为@pub_identity_range指定分配给发布服务器的标识值范围,为@identity_range指定分配给每个订阅服务器的标识值范围,以及为@threshold指定分配新标识范围之前使用的标识值总数的百分比。 有关定义项目的详细信息,请参阅 “定义项目”。

    注释

    确保标识列的数据类型足够大,以支持分配给所有订阅者的标识的整个范围。

在定义事务发布的文章时,禁用自动标识范围管理

  1. 在发布服务器上,对发布数据库执行 sp_addarticle。 为@identityrangemanagementoption指定手动值。 有关定义项目的详细信息,请参阅 “定义项目”。

  2. 将范围分配给订阅服务器上的标识项目列,以避免为更新订阅服务器生成冲突。 有关详细信息,请参阅主题“ 复制标识列”中关于手动管理标识范围分配的部分。

为合并发布定义文章时启用标识范围自动管理

  1. 在发布者处,在发布数据库上执行 sp_addmergearticle。 如果发布的源表具有标识列,请为@identityrangemanagementoption指定一个auto值,为@pub_identity_range指定分配给服务器订阅的标识值范围,为@identity_range指定分配给发布服务器和每个客户端订阅的标识值范围,并为@threshold指定在分配新标识范围之前使用的标识值的总量的百分比。 有关分配新标识范围的详细信息,请参阅“ 复制标识列”主题中的“分配标识范围”。 有关定义项目的详细信息,请参阅 “定义项目”。

    注释

    确保标识列的数据类型足够大,以支持分配给所有订阅者的标识总数范围,尤其是对于具有服务器订阅的订阅者。

在定义合并发布文章时禁用自动标识范围管理

  1. 在发布者处,在发布数据库上执行 sp_addmergearticle。 为 @identityrangemanagementoption指定以下值之一:

    • manual - 必须手动分配标识范围才能更新订阅者。

    • none - 发布服务器上的标识列不会定义为订阅服务器上的标识列。

    有关定义项目的详细信息,请参阅 “定义项目”。

  2. 将范围分配给订阅服务器上的标识项目列,以避免为更新订阅服务器生成冲突。

更改快照或事务发布中现有文章的自动标识范围管理设置

  1. 在发布者的发布数据库中,执行 sp_helparticle,并记下结果集中 identityrangemanagementoption 的值。 如果此值为 0,则不会启用自动标识范围管理。

  2. 如果结果集中 identityrangemanagementoption 的值为 1,请更改设置如下所示:

    • 若要更改分配的标识范围,请在发布服务器上对发布数据库执行 sp_changearticle 。 为@property指定identity_rangepub_identity_range的值,并为@value指定新的范围值。

    • 若要更改分配新范围的阈值,请在发布服务器上对发布数据库执行 sp_changearticle 。 为@property指定阈值,并为@value指定新的阈值。

更改合并发布中现有项目自动标识范围管理设置

  1. 在发布服务器上,对发布数据库执行 sp_helpmergearticle 并记下结果集中 identity_support 的值。 如果此值为 0,则不会启用自动标识范围管理。

  2. 如果结果集中 identity_support 的值为 1,请按如下所示更改设置:

    • 若要更改分配的标识范围,请在发布者的发布数据库上执行 sp_changemergearticle。 为@property指定identity_rangepub_identity_range的值,并为@value指定新的范围值。

    • 若要更改分配新范围的阈值,请在发布服务器上对发布数据库执行 sp_changemergearticle 。 为@property指定阈值,并为@value指定新的阈值。 有关分配新标识范围的详细信息,请参阅“ 复制标识列”主题中的“分配标识范围”。

    • 若要禁用自动标识范围管理,请在发布者服务器上对发布数据库执行 sp_changemergearticle 。 为 @property指定 identityrangemanagementoption 的值,并为@value指定手动

另请参阅

对等事务复制
复制系统存储过程概念
复制标识列