用sql语句复制存储过程
现在想将数据库结构移到另一个数据库
使用下面的方法复制一般的存储过程没什么问题,如果存储过程太大(超过最大字节数8060)按下面的方法就没法复制了
不知道有没有什么解决办法
希望各位大侠帮忙看看
使用下面的方法复制一般的存储过程没什么问题,如果存储过程太大(超过最大字节数8060)按下面的方法就没法复制了
不知道有没有什么解决办法
希望各位大侠帮忙看看
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
/*生成表数据脚本的通用存储过程 邹建 (引用请保留此信息)--*/
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
...全文
相关推荐
MySQL 存储过程中执行动态SQL语句的方法
drop PROCEDURE if exists my_procedure; create PROCEDURE my_procedure() BEGIN declare my_sqll varchar(500); set my_sqll='select * from aa_list'; set @ms=my_sqll; PREPARE s1 from @ms; EXECUTE s1; deallocate prepare s1; end; 您可能感兴趣的文章:mysql 存储过程中变量的定义与赋值操作mysql存储过程详解mysq
SQL Server存储过程生成insert语句实例
主要介绍了SQL Server使用存储过程生成insert语句再执行大量插入数据的方法
SQL 语句存储过程
里面包括动态创建数据库,动态查询,登录存储过程等,这些SQL语句都是动态应用的,不需要在使用Use指令,在一个数据库,就可以操作所有数据库
sql server导出成sql语句
由于sql server2005里没有像oracle那样将数据导出成sql语句(insert into)的功能。所以,写的一个存储过程,该存储过程将提成的表的数据全部生成insert into.....这样的插入语句。以便数据的复制。
Sql语句生成器
可以用于生成sql语句,用于数据迁移或者数据还原


