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
分享到:
相关推荐
### 异构数据库复制技术的研究与实现 #### 一、引言 随着信息技术的快速发展,分布式计算环境变得越来越复杂,数据库复制技术作为一种重要的分布式技术,在提高数据可用性、减轻网络负担以及实现数据冗余等方面...
使用 SQL Server 将表从一个数据库复制到另一个数据库 SQL Server 是一种关系数据库管理系统,它提供了多种方式来将表从一个数据库复制到另一个数据库。下面将详细介绍使用 SQL Server 将表从一个数据库复制到另一...
【Oracle数据库复制】是Oracle数据库管理系统提供的一种技术,旨在解决大量只读数据导致的性能问题。复制技术将数据从一个数据库复制到另一个物理位置的数据库,这样查询和统计操作可以在独立的服务器上进行,减轻主...
**PostgreSQL数据库复制** PostgreSQL数据库复制是一种技术,旨在实现实时维护主库与从库之间的数据一致性。这种功能主要用于高可用性和负载均衡,确保在主数据库出现问题时,从库可以无缝接管,同时也能减轻主库的...
SQL Server 2000的数据库复制是一种强大的技术,它允许数据在多个服务器之间进行同步,从而实现数据的分发、备份和负载均衡。在这个过程中,我们通常涉及到发布、分发和订阅三个主要组件。本文件"SQL2000数据库复制...
**MSSQL Server 2008数据库复制详解** 数据库复制是MSSQL Server 2008中的一项重要功能,它允许数据在不同的数据库之间进行同步和分发,以实现数据备份、负载均衡或者远程访问等目的。下面将详细解释如何在MSSQL ...
### 跨数据库复制数据知识点详解 #### 一、概述 在日常的数据管理工作中,经常会遇到需要将一个数据库中的数据复制到另一个数据库中的场景。本文档将详细介绍如何在SQL Server环境中实现跨数据库的数据复制,主要...
数据库复制技术是现代数据库管理系统(DBMS)中的关键技术之一,旨在解决数据的分布、共享以及在多点之间保持数据一致性的问题。本篇文章将深入探讨数据库复制技术,特别是以SQL Server 2005为例,同时对比其他主流...
MySQL 8 数据库复制技术介绍 MySQL 8 数据库复制技术是指在一个或多个站点生成和复制多个数据副本的过程。这项技术可以帮助确保数据的一致性和可用性,提高系统的可靠性和性能。 数据库复制技术可以应用于各种...
Lotus Domino 邮件从一个数据库复制到另一个数据库 Lotus Domino 是一款功能强大且灵活的协作软件,提供了强大的电子邮件和数据库管理功能。然而,在实际操作中,我们经常需要将邮件从一个数据库复制到另一个...
redis-copy, 将一个redis数据库复制到另一个数据库 RedisCopy这个工具提供了一种将一个redis数据库的内容移动到另一个redis数据库的方法。 代码是由包含在redis源代码中的 redis-copy.rb 脚本插件激发的,但目标是...
### Microsoft SQL Server 2012 数据库复制 #### 一、概述 Microsoft SQL Server 2012 是一款由微软公司开发的关系型数据库管理系统,它提供了强大的数据存储与管理功能,广泛应用于企业级应用程序中。数据库复制...
数据库复制是确保数据高可用性和灾难恢复的关键技术。Oracle和MySQL作为两个主流的数据库管理系统,在数据库复制领域各有所长。本文将深入探讨Oracle和MySQL在数据库复制功能上的差异,并提供实际的代码示例。 ...
Win OGG数据库复制及初始化 Win OGG数据库复制及初始化是指在Windows操作系统下使用Oracle GoldenGate(OGG)软件复制Oracle数据库的过程。下面是相关的知识点: 一、OGG数据库复制的准备工作 1. 用户是否有建表...
数据库复制是指将一个数据库中的数据和结构完整地转移到另一个数据库中,这个过程通常用于创建数据的备份、进行灾难恢复或者在分布式系统中同步数据。在Delphi中,我们可以利用ADO(ActiveX Data Objects)组件库来...
在Windows环境下,双节点数据库复制是构建高可用性和冗余的重要策略,以确保业务连续性和数据安全性。 GoldenGate的核心组件包括捕捉进程(Capture Process)、传送进程(Transport Process)和投递进程(Delivery ...
数据库复制是确保数据高可用性、可扩展性和容错性的关键技术。它涉及将一个数据库中的数据复制到另一个或多个数据库中,从而允许多个数据库实例共享相同的数据集。本文将详细探讨数据库复制的类型、实现方式以及在...
在当今的IT环境中,数据库复制和变化数据捕获(CDC)是确保数据的可用性、一致性和持续性的重要技术。PostgreSQL作为一款先进的开源关系数据库,其复制与CDC的实施方案不仅有助于实现这些目标,还能够支持多种场景下...
在SQL Server中,将表从一个数据库复制到另一个数据库的过程涉及到数据库对象的迁移,这通常通过创建表的结构脚本和数据迁移来实现。以下是一个详细的步骤指南: 1. **启动SQL Server Management Studio (SSMS)**: ...
### 数据库复制技术研究进展分析 #### 一、引言 随着信息技术的飞速发展,海量数据的管理和处理成为企业和组织面临的重大挑战。在这种背景下,数据库技术的重要性愈发凸显。然而,由于网络环境的不稳定性和数据库...