根據當月自動生成下個月資料庫 2

2021-04-17 02:58:55 字數 2140 閱讀 2299

--方法2.指令碼複製usemastergo

ifexists(select*fromdbo.sysobjectswhereid=object_id(n'[dbo].[sp_proccopydb]')andobjectproperty(id,n'isprocedure')=1)dropprocedure[dbo].[sp_proccopydb]go

/*--資料庫自動複製

將指定前緣的資料庫,複製為乙個以當前月份+1為庫名的資料庫中,並且清除所有的資料例如,資料庫前緣為pos,當前日期為2005-3-27則要求複製資料pos200503為pos200504,並且清空裡面的資料

用生成源庫指令碼的方法實現好處是速度快,不需要考慮源資料庫的資料但如果要保留源資料庫的部分資料,則要專門做資料複製處理

--執行需求需要如下兩個檔案,可以在sql安裝盤x86/upgrade目錄下找到scptxfr.exescptxfr.rll

將其複製到下述目錄%systemroot%ystem32/--鄒建2005.03(引用請保留此資訊)--*/

/*--呼叫示例

--複製po***ecsp_proccopydb'pos'--*/

--1.master資料庫中建立乙個處理的儲存過程,實現當月資料庫到下月資料的自動複製

/*--系統需求需要如下兩個檔案,可以在sql安裝盤x86/upgrade目錄下找到scptxfr.exescptxfr.rll

將其複製到下述目錄%systemroot%ystem32/--*/

createprocsp_proccopydb@db_headsysname=n'' --資料庫字首asdeclare@sdbnamesysname,@ddbnamesysnamedeclare@snvarchar(4000),@bkfilenvarchar(1000)

--複製的源庫名及目標庫名select@sdbname=@db_head+convert(char(6),getdate(),112),@ddbname=@db_head+convert(char(6),dateadd(month,1,getdate()),112)

ifdb_id(@sdbname)isnullbeginraiserror(n'源資料庫"%s"不存在',1,16,@sdbname)returnend

ifdb_id(@ddbname)isnotnullbeginraiserror(n'目標資料庫"%s"已經存在',1,16,@ddbname)returnend

--臨時備份檔案名selecttop1@bkfile=rtrim(reverse(filename))frommaster.dbo.sysfileswherename=n'master'select@bkfile=stuff(@bkfile,1,charindex('/',@bkfile),n''),@bkfile=reverse(stuff(@bkfile,1,charindex('/',@bkfile),n''))+n'/backup/'+cast(newid()asnvarchar(36))+n'.sql'

--指令碼生成處理set@s=n'scptxfr/s'+quotename(cast(serverproperty(n'servername')asnvarchar),n'"')+n'/d'+quotename(@sdbname,n'"')+n'/i' --使用windows身份驗證,如果使用sql身份驗證,則愀為+n'/p"sa密碼"',固定使用sa使用者+n'/f'+quotename(@bkfile,n'"')+n'/y/q/t/c/y'execmaster..xp_cmdshell@s,no_output

--建立目標資料庫set@s=n'createdatabase'+quotename(@ddbname)execsp_executesql@s

--使用源庫指令碼,為目標資料庫建立物件set@s=n'osql/s'+quotename(cast(serverproperty(n'servername')asnvarchar),n'"')+n'/d'+quotename(@ddbname,n'"')+n'/e' --使用windows身份驗證,如果使用sql身份驗證,則愀為+n'/u"sa"/p"sa密碼"'+n'/i'+quotename(@bkfile,n'"')execmaster..xp_cmdshell@s,no_output

--刪除臨時備份檔案set@s='del"'+@bkfile+'"'execmaster..xp_cmdshell@s,no_outputgo

根據當月資料庫自動生成下個月資料庫 2

方法2.指令碼複製 use master goif exists select from dbo.sysobjects where id object id n dbo sp proccopydb and objectproperty id,n isprocedure 1 drop procedur...

根據當月資料庫自動生成下個月資料庫 2

方法2.指令碼複製 use master goif exists select from dbo.sysobjects where id object id n dbo sp proccopydb and objectproperty id,n isprocedure 1 drop procedur...

根據當月資料庫自動生成下個月資料庫 2

方法2.指令碼複製 use master goif exists select from dbo.sysobjects where id object id n dbo sp proccopydb and objectproperty id,n isprocedure 1 drop procedur...