sp_repladdcolumn (Transact-SQL)

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

重要说明重要提示

已不推荐使用此存储过程,支持它主要是为了能够向后兼容。 它只能与 Microsoft SQL Server 2000 发布服务器和 SQL Server 2000 重新发布的订阅服务器一起使用。 不应对列将此过程与 SQL Server 2005 或 SQL Server 2008 中引入的数据类型一起使用。

主题链接图标 Transact-SQL 语法约定

语法

sp_repladdcolumn [ @source_object = ] 'source_object', [ @column = ] 'column' ]
    [ , [ @typetext = ] 'typetext' ]
    [ , [ @publication_to_add = ] 'publication_to_add' ]
    [ , [ @from_agent = ] from_agent ]
    [ , [ @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 CONSTRAINT constraint_name DEFAULT 'N' 将为 typetext 参数值。

  • [ @publication\_to\_add =] 'publication_to_add'
    要向其中添加新列的发布的名称。 publication_to_add 的数据类型为 nvarchar(4000),默认值为 ALL。 如果为 ALL,则包含此表的所有发布都将受到影响。 如果指定了 publication_to_add,则仅向该发布中添加新列。

  • [ @from\_agent = ] from_agent
    表示是否由复制代理执行该存储过程。 from_agent 的数据类型为 int,默认值为 0。如果由复制代理执行此存储过程,则使用值 1,其他所有情况都应使用默认值 0。

  • [ @schema\_change\_script =] 'schema_change_script'
    指定用于修改系统生成的自定义存储过程的 SQL Server 脚本的名称和路径。 schema_change_script 的数据类型为 nvarchar(4000),默认值为 NULL。 复制允许用户定义的自定义存储过程替换事务复制中使用的一个或多个默认过程。 在使用 sp_repladdcolumn 更改所复制表项目的架构后,将执行 schema_change_script,它还可用于执行下列任一操作:

    • 如果自定义存储过程是自动重新生成的,则可以使用 schema_change_script 来删除这些自定义存储过程,将其替换为支持新架构的用户定义的自定义存储过程。

    • 如果自定义存储过程不是自动重新生成的,则可以使用 schema_change_script 来重新生成这些存储过程,或者创建用户定义的自定义存储过程。

  • [ @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 不推荐使用,提供该值仅为保证向后兼容性。 向复制的表项目中添加列时,应通过对已发布的表执行数据定义语言 (DDL) 命令来进行。 只要启用了 DDL 复制,复制就会自动复制这些 DDL 命令。 有关详细信息,请参阅对发布数据库进行架构更改

在传播来自重新发布的订阅服务器(在早期版本的 SQL Server 2000 订阅服务器上运行)的 DDL 更改时,仍然需要使用 sp_repladdcolumn。

sp_repladdcolumn 用于所有类型的复制。

当使用 sp_repladdcolumn 时,如果对某个项目的架构进行了更改,而该项目所属于的发布使用 Data Transformation Services (DTS) 包,则架构更改不会传播到订阅服务器,并且在订阅服务器上不会重新生成 INSERT/UPDATE/DELETE 的自定义过程。 用户需要手动重新生成 DTS 包,并在订阅服务器上对架构进行相应的更改。 如果不应用架构更新,则分发代理将无法应用随后的修改。 对架构进行更改之前,确保没有要传送的挂起事务。

如果为 typetext 分配的默认值为非确定性函数(例如,'datetime not null default getdate()'),则添加新列后不进行收敛,因为将在订阅服务器上执行该函数以便将默认值加载到列。

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

重要说明重要提示

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

权限

只有 sysadmin 固定服务器角色和 db_owner 固定服务器角色的成员能够执行 sp_repladdcolumn。

请参阅

参考

系统存储过程 (Transact-SQL)

概念

SQL Server 复制中不推荐使用的功能