潜力博客

人生的最大遗憾莫过于错误地坚持了不该坚持的,轻易地放弃了不该放弃的...

« C#格式化显示数字、货币、日期时间格式最热门的10大网站开发技术 »

MSSQL中如何修改复制中的表结构

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'

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

Search

Categories

Previous

Comments

Archives

Copyright © 2008 432902198309224214 All Rights Reserved.b2bb2c
Powered By Z-Blog Designed by Han'space