Transact-SQL 参考

sp_repladdcolumn

将列添加到已发布的现有表项目中。允许将新列添加到发布该表的所有发布服务器,或者只将新列添加到发布该表的特定发布中。此存储过程在发布服务器的发布数据库上执行。

语法

sp_repladdcolumn [ @source_object = ] 'source_object'
    , [ @column = ] 'column' ]
    [ , [ @typetext = ] 'typetext' ]
    [ , [ @publication_to_add = ] 'publication_to_add' ]
    [ , [ @schema_change_script = ] 'schema_change_script' ]
    [ , [ @force_invalidate_snapshot = ] force_invalidate_snapshot ]
    [ , [ @force_reinit_subscription = ] force_reinit_subscription ]

参数

[@source_object =] 'source_object'

是包含要添加的新列的表项目名。source_object 的数据类型为 nvarchar(358),无默认值。

[@column =] 'column'

是表中将添加为复制的列名。column 的数据类型为 sysname,无默认值。

[@typetext =] 'typetext'

是正添加的列的定义。typetext 的数据类型为 nvarchar(3000),无默认值。例如,如果正添加列 order_filled,且该列是单字符字段,而不是 NULL,并且有默认值 N,则 order_filled 将是 column 参数,而列定义"char(1) NOT NULL DEFAULT 'N'"将是 typetext 参数值。

[@publication_to_add =] 'publication_to_add'

是将新列添加到的发布名。publication_to_add 的数据类型为 nvarchar(4000),默认值为 ALL。如果为 all,则将影响所有包含该表的发布。如果已指定 publication_to_add,则只将新列添加到此发布中。

[@schema_change_script =] 'schema_change_script'

是 SQL 脚本的路径。schema_change_script 的数据类型为 nvarchar(4000),默认值为 NULL。

[@force_invalidate_snapshot = ] force_invalidate_snapshot

启用或禁用使快照无效的能力。force_invalidate_snapshot 的数据类型为 bit,默认值为 1。1 指定项目的更改可能导致快照无效,如果真是这样,则值 1 提供产生新快照的权限。0 指定项目的更改不会导致快照无效。

[@force_reinit_subscription = ] force_reinit_subscription

启用或禁用使订阅重新初始化的能力。force_reinit_subscription 的数据类型为 bit,默认值为 0。0 指定项目的更改不会导致订阅重新初始化。1 指定项目的更改可能导致订阅重新初始化,如果真是这样,则值 1 提供重新初始化订阅的权限。

返回代码值

0(成功)或 1(失败)

注释

sp_repladdcolumn 用于所有类型的复制。

当使用 sp_repladdcolumn 时,如果对某个项目的架构做了更改,而该项目所属的发布使用 DTS 包,则架构更改不会传播到订阅服务器,并且在订阅服务器上不会重新生成 INSERT/UPDATE/DELETE 的自定义过程。用户需要手工重新生成 DTS 包,并在订阅服务器上生成相应的架构更改。如果不应用架构更新,则分发代理程序应用随后的修改将失败。生成架构更改之前,确保没有要传送的挂起事务。有关更多信息,请参见如何转换已发布数据

对于字符模式的发布,将筛选出时间戳列和计算列。如果使用 sp_repladdcolumn 添加时间戳或计算列,则这些发布的订阅不接收此新列。

重要  应在执行 sp_repladdcolumn 后执行发布数据库的备份。如果没有这样做,会在发布数据库还原后导致合并失败。