SQL將資料庫中儲存過程複製到另乙個庫中

2021-06-07 06:24:16 字數 3426 閱讀 6061

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

資料庫複製遷移 將公司遠端資料庫複製到本地

需求 將公司的遠端資料庫的複製到本地,方便在家加班工作時使用。先決條件 本地需要先安裝oracle資料庫,最好適合源資料庫版本保持一致。0.之前使用過很多方法,包括匯出ddl和資料,將生成的sql檔案在新的表中執行,但是都失敗了。sql語句有很多執行錯誤的,改了很多次也沒有成功。2.開啟sql de...

資料庫中儲存過程意義

建立了是拿來用的,至於為什麼要用儲存過程,要先了解儲存過程存在的意義 儲存過程由 sql語句 和流程控制 語句組成。它的功能包括 接受引數 呼叫另一過程 返回乙個狀態值給呼叫過程或批處理,指示呼叫成功或失敗 返回若干個引數值給呼叫過程或批處理,為呼叫者提供動態結果 在遠端sql server中執行等...

將postgers中資料庫表複製到不同的資料庫下面

將乙個資料庫下的 複製到另乙個資料庫下面,包括表中的所有資料 適用於表中資料量特別大的情況 此處以pg為例 參考文章 資料庫表匯出命令 命令 pg dump u postgres f geohash4 fang.sql t port geohash 4 postgres 說明 1 其中pg dump...