sp_repladdcolumn (Transact-SQL)

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

ms189464.note(zh-cn,SQL.90).gif重要提示:
已不推荐使用此存储过程,支持它主要是为了能够向后兼容。它只能与 Microsoft SQL Server 2000 发布服务器和 SQL Server 2000 重新发布的订阅服务器一起使用。

主题链接图标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_repldropcolumn 对复制的表项目进行架构更改后,将执行 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 的早期版本中运行)的更改时,仍然需要使用 sp_repladdcolumn

sp_repladdcolumn 用于所有类型的复制。

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

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

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

ms189464.note(zh-cn,SQL.90).gif重要提示:
应在执行 sp_repladdcolumn 后执行发布数据库的备份。如果没有这样做,会导致发布数据库还原后合并失败。

权限

只有 sysadmin 固定服务器角色或 db_owner 固定数据库角色的成员才能执行 sp_repladdcolumn

请参阅

参考

系统存储过程 (Transact-SQL)

其他资源

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

帮助和信息

获取 SQL Server 2005 帮助