数据库复制

原创 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——如何完整地复制一个数据库

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

SQLServer使用sql语句复制数据库

1、sql语句备份/还原数据库 1.1复制数据库结构和数据 BACKUP DATABASE Test TO DISK = 'c:\test.bak' --备份(注:Test是需要备份的数据库的名称...
  • u010121883
  • u010121883
  • 2015年12月29日 18:00
  • 1786

【mysql】Mysql 数据库复制技巧集锦

最近在学习关于mysql的数据库复制方面的东东,搜集了一些资料,整理如下: 1:mysql手动复制数据库技巧 2:MYSQL 复制范例详解 3:MYSQL数据同步备份复制电脑网络  4:MyS...
  • moxiaomomo
  • moxiaomomo
  • 2013年07月11日 18:07
  • 20198

数据库高可用性——SQL Server 2005数据库复制简单图解

本鸟给大家浅谈一下SQL 2005数据库的复制过程,那么为什么要进行复制呢?数据库复制是指:将表格或数据库的数据复制到另一个表格中或数据库中,利用数据库复制技术可以把数据库全部内容完整的复制到公司...
  • lllljz
  • lllljz
  • 2013年04月09日 15:28
  • 2494

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

为了简洁起见, 源库以下简称为 S , 目标库简称为 T。 文中需要用到 SqlDelta , 下载地址: 点击打开链接 1. 在 源S 上右键, 产生创建数据库的脚本; ...
  • Tomsheng321
  • Tomsheng321
  • 2015年08月20日 22:32
  • 837

SqlServer复制数据库(使用还原的方式)

1.准备好备份文件 2.编写脚本 3.执行过程 附:脚本如下 /* 利用bak恢复数据库,强制还原(REPLACE) STATS = 10...
  • u012320991
  • u012320991
  • 2016年07月09日 22:43
  • 616

SqlServer一键复制数据库脚本

原帖地址:http://blog.csdn.net/bluishglc/article/details/8835676 假定有两个Server:192.168.0.1和192.168.0...
  • broze
  • broze
  • 2014年07月16日 16:16
  • 766

sql2008 r2 数据库 复制操作 代理作业失败的相关操作

前言:对于实在没有办法而又不得不使用sql server的亲们真是一路走来各种的辛酸呀!!!给各位亲们一个大大的赞,多的不说,直接步入正题解决问题。 解决的方法: 1. 首先找到自己电脑的sql se...
  • fly_home_ysc
  • fly_home_ysc
  • 2015年09月18日 13:15
  • 2066

利用数据库复制技术实现数据同步更新

复制的概念   复制是将一 组数据从一个数据源拷贝到多个数据源的技术,是将一份数据发布到多个存储站点上的有效方式。使用复制技术,用户可以将一份数据发布到多台 服务器上,从而使不同的服务器用...
  • my98800
  • my98800
  • 2016年08月29日 09:12
  • 543

Navicate 两个数据库之间拷贝

有的时候,参与的项目,会有多个数据库,而后续的数据库都来源于第一个数据库。但是后续的数据库之间多少会有些区别。 所以还是需要针对每个项目创建一个数据库,平时使用的数据库是postgresql,自带的工...
  • baidu_18607183
  • baidu_18607183
  • 2016年08月23日 16:04
  • 1223
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:数据库复制
举报原因:
原因补充:

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