数据库复制

原创 2003年12月29日 17:29:00

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


/*--数据库数据复制

 将一个数据库中的数据复制到另一个数据库
 如果某列在目标数据库中为标识列,将不会被复制

 适用范围:数据库结构发生了变化,想将旧数据库进行升级
  这样就可以根据新的数据库结构创建一个空库,然后
  将旧数据库的所有数据复制到新库中

--邹建 2003.10(引用请保留此信息)--*/

/*--调用示例

 exec p_copydb 'bns_aa','bns_new'
 exec p_copydb 'acc_五医','acc_演示数据8'
--*/
create proc p_copydb
@o_dbname sysname,  --要复制数据的数据库--源数据库
@n_dbname sysname  --接收数据的数据库--目标数据库
as
declare @sql nvarchar(4000)

--禁用约束/触发器,防止复制时的数据冲突
set @sql='declare #tbc cursor for select name
 from '+@n_dbname+'..sysobjects where xtype=''U'' and status>=0'
exec(@sql)

declare @tbname sysname
open #tbc
fetch next from #tbc into @tbname
while @@fetch_status=0
begin
 set @sql='alter table '+@n_dbname+'..['+@tbname+'] NOCHECK CONSTRAINT ALL'
 exec(@sql)
 set @sql='alter table '+@n_dbname+'..['+@tbname+'] disable trigger ALL'
 exec(@sql)
 fetch next from #tbc into @tbname
end
close #tbc

--复制数据
declare @sql1 varchar(8000)
set @sql='declare #tb cursor for select a.name from '
 +@o_dbname+'..sysobjects a inner join '
 +@n_dbname+'..sysobjects b on a.name=b.name
  where a.xtype=''U'' and b.xtype=''U'''
exec(@sql)
open #tb
fetch next from #tb into @tbname
while @@fetch_status=0
begin
 select @sql1=''
  ,@sql='select @sql1=@sql1+'',[''+a.name+'']'' from(
  select name from '+@o_dbname+'..syscolumns where id in
  (select id from '+@o_dbname+'..sysobjects where name='''+@tbname+''')
 ) a inner join (
  select name from '+@n_dbname+'..syscolumns where status<>0x80 and id in
  (select id from '+@n_dbname+'..sysobjects where name='''+@tbname+''')
 ) b on a.name=b.name'
 exec sp_executesql @sql,N'@sql1 nvarchar(4000) out',@sql1 out

 select @sql1=substring(@sql1,2,8000)
 exec('insert into '+@n_dbname+'..['+@tbname+']('+@sql1
  +') select '+@sql1+' from '+@o_dbname+'..['+@tbname+']')
 if @@error<>0
  print('insert into '+@n_dbname+'..['+@tbname+']('+@sql1
   +') select '+@sql1+' from '+@o_dbname+'..['+@tbname+']')
 fetch next from #tb into @tbname
end
close #tb
deallocate #tb

--数据复制完成后启用约束
open #tbc
fetch next from #tbc into @tbname
while @@fetch_status=0
begin
 set @sql='alter table '+@n_dbname+'..['+@tbname+'] CHECK CONSTRAINT ALL'
 exec(@sql)
 set @sql='alter table '+@n_dbname+'..['+@tbname+'] enable trigger ALL'
 exec(@sql)
 fetch next from #tbc into @tbname
end
close #tbc
deallocate #tbc
go

数据库复制详解

一、需求         为了解决数据同步,我们经常使用各种各样的导入导出程序,过程繁琐,下面将介绍数据库复制实现数据库同步,SqlServer数据库同步是项目中常用到的环节,若一个项目中的数据同时...
  • fengchao1000
  • fengchao1000
  • 2012年05月29日 17:24
  • 2040

数据库复制

if exists (select * from dbo.sysobjects where id = object_id(N[dbo].[p_copydb]) and OBJECTPROPERTY(i...
  • chenzhiya
  • chenzhiya
  • 2008年01月03日 15:46
  • 170

SQLServer——如何完整地复制一个数据库

为了简洁起见, 源库以下简称为 S , 目标库简称为 T。 文中需要用到 SqlDelta , 下载地址: 点击打开链接 1. 在 源S 上右键, 产生创建数据库的脚本; 2. 修改脚本,主要...
  • yenange
  • yenange
  • 2015年06月17日 11:01
  • 13947

数据库复制表数据

---将表名B数据复制到已有表名A中。 INSERT INTO 表名A(A.字段名1,A.字段名2) select  (B.字段名1,B.字段名2) FROM 表名B ---新创建个表名A...
  • dbagaoshou
  • dbagaoshou
  • 2014年09月11日 10:43
  • 259

HVR数据复制软件部署之(二)--HUB端配置

HVR数据复制软件部署之(二)--HUB端配置
  • msdnchina
  • msdnchina
  • 2016年02月24日 15:52
  • 570

同一个数据库间如何进行数据复制?

先说下我的问题场景:技术架构是基于SS和JPA的,当我在对一个从DB中取出的对象进行操作时,需要先将这个对象重新持久化(查出后立即做个数据库记录备份);因为是同一个session所以对session中...
  • ikaituozhe
  • ikaituozhe
  • 2011年06月14日 17:51
  • 550

数据库复制问题

类似sp_MSins_dbotabname_msrepl_ccs的存储过程是由快照代理在发生初始化快照时自动生成的。...
  • jackal3
  • jackal3
  • 2011年03月18日 10:12
  • 439

数据库复制表结构

现在有一个数据库,我想用他的表结构,找了好久,比较好用的方法就是下面两种: 1、 create table a as select * from b where 1=2 ; 2、   -...
  • axin66ok
  • axin66ok
  • 2012年02月20日 19:04
  • 1311

mysql主从数据库复制

运行环境: l  虚拟机模仿四台CentOS6.3服务器 l  主数据库master1 :192.168.88.21 l  从数据库slave1 :192.168.88.22 l  从数据库s...
  • lgh1117
  • lgh1117
  • 2013年04月11日 08:59
  • 612

关于数据库复制

在两台Windows 2003系统中都装有sqlserver 2005企业版1.发布跟发分在同一个数据库里面2.在另外一台上进行订阅(只订阅一张表)A:当选择用推送订阅的时候.....发布数据库的内容...
  • djn547
  • djn547
  • 2010年12月01日 19:22
  • 276
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:数据库复制
举报原因:
原因补充:

(最多只允许输入30个字)