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+''')
) ainner 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
分享到:
相关推荐
数据 库 复 制是分布式环境中的一项关键技术,同时由于数据库异构现象越来 越普遍,研究异构数据库复制无论在理论还是实际上都具有非常重要的意义。
redis-copy, 将一个redis数据库复制到另一个数据库 RedisCopy这个工具提供了一种将一个redis数据库的内容移动到另一个redis数据库的方法。 代码是由包含在redis源代码中的 redis-copy.rb 脚本插件激发的,但目标是...
SQL2000数据库复制订阅设置过程.rar 步骤比较多,以便以后使用。
复制,顾名思义就是将数据库中的数据拷贝到不同物理地点的数据库中。 在很多生产环境中,经常遇到一些大量得数据,这些数据只用作查询统计功能。例如:历史告警,历史性能指标,历史事件,等等。这种数据的特点是:...
数据库复制技术
数据复制按功能可以分为三类:基本(简单)复制、高级复制和混合复制,而高级复制又可分为多主节点复制和可更新快照复制。在 本文主要给出一个用于 Oracle 10g 多主站复制的实际例子及实现中的配置细节,最后加入的...
Microsoft SQL Server 2012 数据库复制(截图加步骤) 连接到服务器.选定一个被复制的当前数据库 点击右键弹出 任务-复制数据库 到此步,即完成制定数据库的复制,可以复制在本地服务器,也可以复制到选定服务器。这...
SQL SERVER数据库实现跨数据库进行表之间的数据复制,
灵蜂Beedup工具 基于数据库日志复制机制之PostgreSQL 详细介绍用Beedup 工具产品实现功能的详细操作文档 图文并茂
基于windows平台,双节点的数据库复制,实现数据库冗余,高可靠 ,
本文档详细介绍了sql server怎样从一个数据库复制表到另一个数据库的方法。有图为例,简单易懂。
Microsoft SQL Server 2012 数据库复制
sql server 从一个数据库复制一张表到另外一个数据库
Sybase 数据库复制及其实现.doc
MySQL 8数据库复制技术介绍.pptx
这些MySQL面试题涵盖了数据库设计、存储过程和触发器、数据库复制和集群等方面的知识点,测试了面试者的MySQL数据库基础知识、问题解决能力和实际应用能力。 通过回答这些问题,面试者可以展现自己熟练掌握MySQL...
MSSQL2008 数据库复制订阅配置详细说明
oracle11g数据库,如何复制数据库。详细解说。RMAN支持两种类型复制:活动数据库复制和基于备份的复制,主要用来建立测试库。分别进行测试
【M】全国省市联动无数据库复制即可使用 【M】全国省市联动无数据库复制即可使用
特别有用的PostgreSQL数据库复制与CDC实施方案详细手册 特别有用的PostgreSQL数据库复制与CDC实施方案详细手册