************************数据库之间数据复制问题*************************

zsgbox 2006-05-24 02:46:54
1、如何把一个数据库中的全部存储过程及函数复制到另一个数据库中,存储过程有加密的。
2、或者,在两个表结构完全相同的数据库,但数据内容不一样,怎么把一个数据库中所有的表及其据,全部换成另一个的,标识种子也跟以前一样。比如说自增ID,要保持跟原数据一样,以前是5,拷贝过来还要是5,我曾经试着把所有表删除,再导入,但是自增属性,默认值都没了。
请指点。
...全文
156 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
qian_gh 2006-05-24
  • 打赏
  • 举报
回复
用订阅发布方式
hawk_js 2006-05-24
  • 打赏
  • 举报
回复
直接分离/拷贝/附加
子陌红尘 2006-05-24
  • 打赏
  • 举报
回复
2、如果要整个数据库复制,可以用备份/恢复方式实现,也可以采用分离/拷贝/附加方式实现。
子陌红尘 2006-05-24
  • 打赏
  • 举报
回复
1、邹老大以前写的存储过程复制的例子,没有考虑加密的问题:
-------------------------------------------------------------------------------------------------------------------

use master
go

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[sp_copyProce]') and

OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[sp_copyProce]
GO

/*--生成表数据脚本的通用存储过程,

功能:将一个数据库中的存储过程,复制到另一数据库中
目标数据库中已经有的存储过程不覆盖

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

/*--调用示例

exec master.dbo.sp_copyProce 'a','b'
--*/

create proc sp_copyProce
@s_dbname sysname, --要复制存储过程的源数据库名
@d_dbname sysname --目标数据库名
as
set nocount on
if db_id(@s_dbname) is null
begin
raiserror('数据库"%s"不存在',1,16,@s_dbname)
return
end
if db_id(@d_dbname) is null
begin
raiserror('数据库"%s"不存在',1,16,@d_dbname)
return
end
select @s_dbname='['+replace(@s_dbname,']',']]')+']'
,@d_dbname='['+replace(@d_dbname,']',']]')+']'

--复制存储过程信息到临时表
create table #sys_syscomments_bak(name sysname,xtype char(2),number smallint,colid

smallint,status smallint,ctext varbinary(8000))
exec('
insert #sys_syscomments_bak
(name,xtype,number,colid,status,ctext)
select o.name,o.xtype,c.number,c.colid,c.status,c.ctext
from '+@s_dbname+'.dbo.syscomments c,'+@s_dbname+'.dbo.sysobjects o
where c.id=o.id
and o.status>=0
and o.xtype=''P''
and not exists(
select * from '+@d_dbname+'.dbo.sysobjects where name=o.name)
')

--创建存储过程
declare tb cursor local for
select 'use '+@d_dbname+' exec(''create proc dbo.['+replace(name,N']',N']]')+'] as --'')

exec sp_recompile ['+replace(name,N']',N']]')+']'
from #sys_syscomments_bak
declare @s nvarchar(4000)
open tb
fetch tb into @s
while @@fetch_status=0
begin
exec(@s)
fetch tb into @s
end
close tb
deallocate tb

--复制存储过程结构
exec sp_configure 'allow updates',1 reconfigure with override
begin tran
exec('
delete c
from '+@d_dbname+'.dbo.syscomments c,'+@d_dbname+'.dbo.sysobjects

o,#sys_syscomments_bak ob
where c.id=o.id and o.name=ob.name and o.xtype=ob.xtype
insert '+@d_dbname+'.dbo.syscomments([id],[number],[colid],[status],[ctext])
select o.[id],ob.[number],ob.[colid],ob.[status],ob.[ctext]
from '+@d_dbname+'.dbo.sysobjects o,#sys_syscomments_bak ob
where o.name=ob.name and o.xtype=ob.xtype')
commit tran
exec sp_configure 'allow updates',0 reconfigure with override
go


--使用测试
create database a
go
use a
go
create proc p_test1
as
select 'test1'
go


create proc p_test2
as
select 'test2'
go

create database b
go

exec master.dbo.sp_copyProce 'a','b'
go
select * from b.dbo.sysobjects where xtype='P'

exec b.dbo.p_test1
exec b.dbo.p_test2
go

use master
go

drop database a,b
drop proc sp_copyProce
zninger 2006-05-24
  • 打赏
  • 举报
回复
加密的存储过车可以通过备份恢复来实现

自增的字段在操作的时候删除数据是不会从1开始的,只有drop表,再重新建立才能从1开始;或者是在系统表中有可以初始化的记载,你可以修改系统表

34,575

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧