MSSQL复制中的表,可以用sp_repladdcolumn 来增加列,用sp_repldropcolumn来删除列。而且操作发布数据库中执行,下次复制时,会自动发布到订阅数据库。具体用法:
sp_repladdcolumn 增加列
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_repldropcolumn 删除列
sp_repldropcolumn
从已发布的现有表项目中除去列。此存储过程在发布服务器的发布数据库上执行。
语法
sp_repldropcolumn [ @source_object = ] 'source_object'
, [ @column = ] 'column'
[ , [ @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(258),无默认值。
[@column =] 'column'
是表中要除去的列名。column 的数据类型为 sysname,无默认值。
[@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_repldropcolumn 用于所有类型的复制。
当使用 sp_repldropcolumn 时,如果对某个项目的架构做了更改,而该项目所属的发布使用 DTS 包,则架构更改不会传播到订阅服务器,并且在订阅服务器上不会重新生成 INSERT/UPDATE/DELETE 的自定义过程。用户需要手工重新生成 DTS 包,并在订阅服务器上生成相应的架构更改。如果不应用架构更新,则分发代理程序应用随后的修改将失败。生成架构更改之前,确保没有要传送的挂起事务。
例:
sp_repladdcolumn @source_object = 'table_name'
, @column = 'column_name'
, @typetext = 'varchar(255) NULL'
sp_repladdcolumn @source_object = 'table_name'
, @column = 'column_name'
, @typetext = 'int NOT NULL DEFAULT (0)'
sp_repldropcolumn @source_object = 'table_name'
, @column = 'column_name'