管理标识列

本主题说明如何使用 SQL Server Management Studio 或 Transact-SQL 在 SQL Server 2012 中管理标识列。 在将订阅服务器插入操作复制回发布服务器时,必须对标识列进行管理,以免在订阅服务器和发布服务器上分配相同的标识值。 复制可自动管理标识范围,或者您可以选择手动处理标识范围管理。 有关由复制提供的标识范围管理选项的信息,请参阅复制标识列

本主题内容

  • 开始之前:

    建议

  • 管理标识列,使用:

    SQL Server Management Studio

    Transact-SQL

开始之前

建议

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

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

用于“返回首页”链接的箭头图标[Top]

使用 SQL Server Management Studio

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

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

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

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

指定标识列管理选项

  1. 如果发布服务器运行的是 SQL Server 2005 之前的 SQL Server 版本,请在新建发布向导的**“发布类型”页上,选择“合并发布”“带有更新订阅的事务发布”**。

  2. 在**“项目”**页上,选择一个包含标识列的表。

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

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

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

    选项

    说明

    发布服务器范围大小

    表示范围大小的整数值(例如 20000)。

    请参阅复制标识列中的“指定标识范围”部分。

    订阅服务器范围大小

    表示范围大小的整数值(例如 10000)。

    请参阅复制标识列中的“指定标识范围”部分。

    范围阈值百分比

    表示百分比阈值的整数值(例如,90 相当于 90%)。

    指定新标识范围之前在节点上使用的总标识值的百分比。

    注意注意

    必须指定此值,但此值只用于:使用排队更新订阅的订阅服务器以及运行 SQL Server Compact 或以前版本的其他 SQL Server 版本的合并发布的订阅服务器。 有关详细信息,请参阅复制标识列的“指定标识范围”部分。

    下一个范围的起始值

    整数值。 只读。

    下一个范围的起始值。 例如,如果当前范围是 5001-6000,此起始值就是 6001。

    最大标识值

    整数值。 只读。

    标识列的最大值。 由列的基本数据类型决定。

    增量

    整数值。 只读。

    对于每个插入操作,标识列中的数字应增加或减少的量:通常设置为 1。

  6. 单击“确定”。

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

  1. 在**“发布属性 - <发布>”对话框中的“项目”**页上,选择一个包含标识列的表。

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

  3. 在**“项目属性 - <项目>”对话框的“属性”选项卡上的“标识范围管理”部分中,输入下列一个或多个属性的值:“发布服务器范围大小”“订阅服务器范围大小”“范围阈值百分比”**。

  4. 单击“确定”。

  5. 在**“发布属性 - <发布>”对话框中,单击“确定”**。

用于“返回首页”链接的箭头图标[Top]

使用 Transact-SQL

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

定义事务发布的项目时启用自动标识范围管理

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

    注意注意

    确保标识列的数据类型足够大,从而能够支持分配到所有订阅服务器的标识总范围。

定义事务发布的项目时禁用自动标识范围管理

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

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

定义合并发布的项目时启用自动标识范围管理

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

    注意注意

    确保标识列的数据类型足够大,从而能够支持分配到所有订阅服务器(尤其是具有服务器订阅的订阅服务器)的标识总范围。

定义合并发布的项目时禁用自动标识范围管理

  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 的值指定为 threshold,并为 @value 指定新阈值。

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

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

  2. 如果结果集中 identity_support 的值为 1,则按下面的方法更改设置:

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

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

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

用于“返回首页”链接的箭头图标[Top]

请参阅

概念

对等事务复制

复制系统存储过程概念

复制标识列