管理标识列
本主题说明如何使用 SQL Server Management Studio 或 Transact-SQL 在 SQL Server 2012 中管理标识列。 在将订阅服务器插入操作复制回发布服务器时,必须对标识列进行管理,以免在订阅服务器和发布服务器上分配相同的标识值。 复制可自动管理标识范围,或者您可以选择手动处理标识范围管理。 有关由复制提供的标识范围管理选项的信息,请参阅复制标识列。
本主题内容
开始之前:
建议
管理标识列,使用:
SQL Server Management Studio
Transact-SQL
开始之前
建议
在多个发布中发布表时,必须为这些发布指定相同的标识范围管理选项。 有关详细信息,请参阅发布数据和数据库对象中的“在多个发布中发布表”。
若要创建一个可在多个表中使用的自动递增数字,或者可以从应用程序中调用而不引用任何表的自动递增数字,请参阅序列号。
[Top]
使用 SQL Server Management Studio
可在新建发布向导的**“项目属性 -** **<项目>”对话框中的“属性”**选项卡上指定标识列管理选项。 有关使用此向导的详细信息,请参阅创建发布。 在新建发布向导中:
如果在**“发布类型”页上选择“合并发布”或“带有更新订阅的事务发布”**,那么请选择自动或手动标识范围管理(建议使用默认值自动)。 在发布表后不能修改该属性,但可以修改其他相关属性。
如果选择其他的发布类型,则应将标识范围管理设置为手动。
可在**“项目属性 -** <项目>”(可以通过**“发布属性 - <发布>”对话框访问)中的“属性”**选项卡上修改标识范围和阈值。 有关访问此对话框的详细信息,请参阅查看和修改发布属性。
指定标识列管理选项
如果发布服务器运行的是 SQL Server 2005 之前的 SQL Server 版本,请在新建发布向导的**“发布类型”页上,选择“合并发布”或“带有更新订阅的事务发布”**。
在**“项目”**页上,选择一个包含标识列的表。
单击**“项目属性”,再单击“设置突出显示的表项目的属性”**。
在**“项目属性 - <项目>”对话框的“属性”选项卡的“标识范围管理”部分,将“自动管理标识范围”属性设置为“自动”或“手动”**(对于运行 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。
单击“确定”。
发布表后修改标识范围和阈值
在**“发布属性 - <发布>”对话框中的“项目”**页上,选择一个包含标识列的表。
单击**“项目属性”,再单击“设置突出显示的表项目的属性”**。
在**“项目属性 - <项目>”对话框的“属性”选项卡上的“标识范围管理”部分中,输入下列一个或多个属性的值:“发布服务器范围大小”、“订阅服务器范围大小”和“范围阈值百分比”**。
单击“确定”。
在**“发布属性 - <发布>”对话框中,单击“确定”**。
[Top]
使用 Transact-SQL
创建项目时,可使用复制存储过程来指定标识范围管理选项。
定义事务发布的项目时启用自动标识范围管理
在发布服务器上,对发布数据库执行 sp_addarticle。 如果要发布的源表具有标识列,则在为 @threshold 分配新标识范围之前,应将 @identityrangemanagementoption 的值指定为 auto,指定分配给发布服务器的标识值范围 @pub_identity_range,指定分配给每个订阅服务器的标识值范围 @identity_range,并指定所使用的总标识值的百分比。 有关如何定义项目的详细信息,请参阅定义项目。
注意 确保标识列的数据类型足够大,从而能够支持分配到所有订阅服务器的标识总范围。
定义事务发布的项目时禁用自动标识范围管理
在发布服务器上,对发布数据库执行 sp_addarticle。 将 @identityrangemanagementoption 的值指定为 manual。 有关如何定义项目的详细信息,请参阅定义项目。
将范围分配到订阅服务器上的标识项目列,以避免在更新订阅服务器时产生冲突。 有关详细信息,请参阅复制标识列主题中的“为手动标识范围管理分配范围”部分。
定义合并发布的项目时启用自动标识范围管理
在发布服务器上,对发布数据库执行 sp_addmergearticle。 如果要发布的源表具有标识列,则在为 @threshold 分配新标识范围之前,应将 @identityrangemanagementoption 的值指定为 auto,指定为分配给服务器订阅的标识值范围 @pub_identity_range,指定为分配给发布服务器和每个客户端订阅的标识值范围 @identity_range,并指定所使用的总标识值的百分比。 有关何时分配新标识范围的详细信息,请参阅复制标识列主题中的“分配标识范围”。 有关如何定义项目的详细信息,请参阅定义项目。
注意 确保标识列的数据类型足够大,从而能够支持分配到所有订阅服务器(尤其是具有服务器订阅的订阅服务器)的标识总范围。
定义合并发布的项目时禁用自动标识范围管理
在发布服务器上,对发布数据库执行 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]