CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  MS-SQL Server >  疑难问题

请教 关于复制中的表结构的修改.

楼主lang8134(heaton)2006-05-02 16:23:11 在 MS-SQL Server / 疑难问题 提问

我有个数据库中的一些表已经发布并且已经被订阅.现在遇到这样一个问题:  
  其中的一个表,数据不是经常改动,它原来的表结构不合理,我想修改它的表结构(新增字段,并修改主键盘).但该表已经发布并且被订阅,所以不允许修改(只可新增).  
          请教,如何不影响其他表的复制的同时,暂时只取消我要修改表的订阅和发布(不停止已经发布和订阅的其他表),等我改了这个表的结构后,再发布和订阅?  
   
          希望大家帮帮,给些意见也好,谢谢.  
   
  注:我用的是事务复制.  
  问题点数:100、回复次数:5Top

1 楼lang8134(heaton)回复于 2006-05-05 15:30:11 得分 0

希望大家能给些意见也好。  
  Top

2 楼edp08(王二)回复于 2006-05-05 16:44:00 得分 20

可以这样吗?  
   
  只能帮顶了  
  Top

3 楼salonstar(Tommy)回复于 2006-05-06 12:11:03 得分 80

復制的表,只能用sp_repladdcolumn   來增加列,用sp_repldropcolumn   來刪除列,詳細可以查看這兩個存儲過程之幫助,以上操作只需在出版數據庫中執行,下次復制時,會自動傳送到訂閱數據庫。  
  如果增加的列為需要定義為主鍵,則需要:  
  sp_repladdcolumn   'table_name','column_name','char(10)   not   null   default   '''''  
  也就是說,增加列時需要指定該列為not   null,   同時需要指定default   value才可以。  
  如果sp_repldropcolumn   需要刪除一個主鍵的列時,先要將主鍵取消(包括出版及訂閱),然后再執行sp_repldropcolumn   才可以,同樣如果刪除的列有default   value則,需要先手工刪除default   value(包括出版及訂閱),然后再執行。  
  Top

4 楼salonstar(Tommy)回复于 2006-05-06 12:14:07 得分 0

註:復制後,你是無法進行修改列的,只能先將數據備份好,然后刪除列,再增加列,然后將數據還原回去。Top

5 楼lang8134(heaton)回复于 2006-05-06 12:44:39 得分 0

谢谢edp08()   帮顶,也感谢   salonstar(Tommy)   的答复.  
   
  1.我先把订阅和发布项目删除了(tj_mzzb_new是我发布的一张表):  
  --删除     tj_mzzb_new的订阅  
  sp_dropsubscription   @publication   =   N'bsrun',@article   =     N'tj_mzzb_new',  
                                          @subscriber   =   N'query',@destination_db   =   N'bsrun'    
   
  --删除     tj_mzzb_new的复制  
  sp_droparticle   @publication   =     'bsrun'   ,     @article   =     'tj_mzzb_new'  
  2.之后又手动的加上发布和订阅:  
  --增加   复制项目tj_mzzb_new  
  exec   sp_addarticle   @publication   =   N'bsrun',   @article   =   N'tj_mzzb_new',         @source_owner   =   N'dbo',   @source_object   =   N'tj_mzzb_new',  
    @destination_table   =   N'tj_mzzb_new',   @type   =   N'logbased',   @creation_script   =   null,   @description   =   null,    
  @pre_creation_cmd   =   N'drop',   @schema_option   =   0x00000000000000F3,   @status   =   16,   @vertical_partition   =   N'true',    
  @ins_cmd   =   N'SQL',   @del_cmd   =   N'sp_MSdel_tj_mzzb_new',   @upd_cmd   =   N'SQL',   @filter   =   null,   @sync_object   =   null,  
    @auto_identity_range   =   N'false'  
   
  exec   sp_articlecolumn   @publication   =   N'bsrun',   @article   =   N'tj_mzzb_new'  
  --增加订阅   项目tj_mzzb_new  
  exec   sp_addsubscription   @publication   =   N'bsrun',  
    @article   =   N'TESTT',   @subscriber   =   N'query',   @destination_db   =   N'bsrun',  
    @sync_type   =   N'none',   @update_mode   =   N'read   only',   @offloadagent   =   0,   @dts_package_location   =   N'distributor'  
   
  注:以上操作也都是成功的,但当我写数据的时候,就出现了错误"进程未能执行sp_replcmds"(未能得到表   1576093101   的复制信息),不知道是为什么,还有待研究.  
   
  Top

相关问题

关键词

得分解答快速导航

  • 帖主:lang8134
  • edp08
  • salonstar

相关链接

  • SQL Server类图书

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo