比如说删除了怎么办,增加一个字段怎么办,怎么自动变化到订阅数据库?有什么好方法?
最好是自动的
谢谢

解决方案 »

  1.   

    参考
    http://topic.csdn.net/t/20031224/09/2596576.html
      

  2.   

    老大写的,参考一下:
    /*--   
        
      研究了一整天,终于找到了解决的办法.   
        
      用下面的存储过程,将你的数据库复制一下,就可以解决问题了.   
        
        
      --用法:   
      打开查询分析器,将下面的代码复制到查询分析器中,按F5执行.   
        
      --然后执行下面的语句来调用:   
      exec   p_CopyDb   @sdbname='要删除强制订阅的数据库'   
      ,@ddbname='删除强制订阅后生成的数据库名'   
        
        
      --*/   
        
        
      /*--将一个数据库完整复制成另一个数据库   
        
      --邹建   2003.10--*/   
        
      /*--调用示例   
      exec   p_CopyDb   @sdbname='要删除强制订阅的数据库'   
      ,@ddbname='test'   
      --*/   
        
      if   exists   (select   *   from   dbo.sysobjects   where   id   =   object_id(N'[dbo].[p_CopyDb]')   and   OBJECTPROPERTY(id,   N'IsProcedure')   =   1)   
      drop   procedure   [dbo].[p_CopyDb]   
      GO   
        
      create   proc   p_CopyDb   
      @sdbname   sysname='',       --定义要复制的数据库名,默认为当前数据库   
      @ddbname   sysname, --定义复制后生成的数据库名   
      @overexist   bit=1,             --是否覆盖已经存在的数据库   
      @killuser   bit=1       --是否关闭用户使用进程,仅@overexist=1时有效   
      as   
      declare   @sql   varchar(8000),@bpath   varchar(8000),@rpath   varchar(8000)   
        
      --得到要复制的数据库名   
      if   isnull(@sdbname,'')=''   set   @sdbname=db_name()   
        
      --得到临时备份数据目录及文件名   
      select   @bpath=rtrim(reverse(filename))   from   master..sysfiles   where   name='master'   
      select   @bpath=substring(@bpath,charindex('\',@bpath)+1,8000)   
      ,@bpath=reverse(substring(@bpath,charindex('\',@bpath),8000))+'BACKUP\'   
      +@sdbname+'_'+convert(varchar,getdate(),112)   
      +'_'+replace(convert(varchar,getdate(),108),':','')   
      +'.bak'   
        
      --生成数据库备份语句,进行数据库备份   
      set   @sql='backup   database   '+@sdbname   
      +'   to   disk='''+@bpath   
      +'''   with   NOINIT'   
      exec(@sql)   
        
      --根据备份文件恢复成新的数据库(完成复制工作)   
      set   @sql='restore   database   '+@ddbname   
      +'   from   disk='''+@bpath+''''   
      +'   with   file=1'   
      +case   when   @overexist=1   then   ',replace'   else   ''   end   
        
      --得到数据库存放的默认目录   
      --得到SQL安装时设置的数据文件路径   
      select   @rpath=rtrim(reverse(filename))   from   master..sysfiles   where   name='master'   
      select   @rpath=reverse(substring(@rpath,charindex('\',@rpath),8000))   
        
      --添加移动逻辑文件的处理   
      --从备份文件中获取逻辑文件名   
      declare   @lfn   nvarchar(128),@tp   char(1),@i   int   
        
      --创建临时表,保存获取的信息   
      create   table   #tb(ln   nvarchar(128),pn   nvarchar(260),tp   char(1),fgn   nvarchar(128),sz   numeric(20,0),Msz   numeric(20,0))   
      --从备份文件中获取信息   
      insert   into   #tb   exec('restore   filelistonly   from   disk='''+@bpath+'''')   
      declare   #f   cursor   for   select   ln,tp   from   #tb   
      open   #f   
      fetch   next   from   #f   into   @lfn,@tp   
      set   @i=0   
      while   @@fetch_status=0   
      begin   
      select   @sql=@sql+',move   '''+@lfn+'''   to   '''+@rpath+@ddbname+cast(@i   as   varchar)   
      +case   @tp   when   'D'   then   '.mdf'''   else   '.ldf'''   end   
      ,@i=@i+1   
      fetch   next   from   #f   into   @lfn,@tp   
      end   
      close   #f   
      deallocate   #f   
        
      --关闭用户进程处理   
      if   @overexist=1   and   @killuser=1   
      begin   
      declare   @spid   varchar(20)   
      declare   #spid   cursor   for   
      select   spid=cast(spid   as   varchar(20))   from   master..sysprocesses   where   dbid=db_id(@ddbname)   
      open   #spid   
      fetch   next   from   #spid   into   @spid   
      while   @@fetch_status=0   
      begin       
      exec('kill   '+@spid)   
      fetch   next   from   #spid   into   @spid   
      end       
      close   #spid   
      deallocate   #spid   
      end   
        
      --恢复数据库   
      exec(@sql)   
        
      --删除备份的临时文件   
      set   @sql='del   "'+@bpath+'"'   
      exec   master..xp_cmdshell   @sql,no_output   
      select   @sql,@bpath,@rpath   
      go
      

  3.   

     通过导库的方法可以实现,但我是这样解决的,在订阅服务器上   
      执行系统存储过程   sp_removedbrepliction   'database   name'   
      建了一个测试用数据库,模拟当前条件,执行时未出错。在正式   
      数据库上执行报告任务完成,但有错误,但目的实现
      

  4.   

    http://social.microsoft.com/Forums/ja-JP/sqlserverzhchs/thread/85dc11e7-b15e-4a22-807c-7db20cf10039也是老大的
      

  5.   

    sql server 2008 有没有好方法自动处理?