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

2021-04-17 02:58:55 字數 2797 閱讀 1511

/*--處理要求

在sql資料庫裡有乙個名為pos200502的database,每個月會有乙個類似於這樣名稱(pos200502pos200503)的database

我該如何利用sqlserver的自動作業+一段儲存過程,實現以下功能:1.每個月的25號,自動建立乙個下乙個月的database,database名字定為:posyyyymm(yyyymm是年和月,始終是執行操作時間的下乙個月)2.再將本月database的所有結構(包括表、檢視、儲存過程等)一模一樣的複製到下乙個月的database中。(注意僅複製結構,不複製任何資料!)--*/

---方法1.備份+恢復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,並且清空裡面的資料

用備份+恢復的方法實現好處是在清理資料時,可以設定條件,保留指定的資料不好的地方是資料多時,速度慢,消耗的資源多

--鄒建2005.03(引用請保留此資訊)--*/

/*--呼叫示例

--複製po***ecsp_proccopydb'pos'--*/createprocsp_proccopydb@db_headsysname=n'' --資料庫字首asdeclare@sdbnamesysname,@ddbnamesysnamedeclare@snvarchar(4000),@bkfilenvarchar(1000),@movenvarchar(4000)

--複製的源庫名及目標庫名if@db_headisnullset@db_head=n''

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'.bak'

--資料檔案移動語句set@s=n'set@move=n''''select@move=@move+n'',move''+quotename(rtrim(name),n'''''''')+n''to''+quotename(rtrim(casewhencharindex(n'+quotename(@sdbname,n'''')+n',filename)>0thenstuff(filename,charindex(n'+quotename(@sdbname,n'''')+n',filename),'+cast(len(@sdbname)asnvarchar)+n',n'+quotename(@ddbname,n'''')+n')elsereverse(stuff(reverse(filename),charindex(''/'',reverse(filename)),0,+n''_''+reverse(n'+quotename(@ddbname,n'''')+n')))end),n'''''''')from'+quotename(@sdbname)+n'.dbo.sysfiles'execsp_executesql@s,n'@movenvarchar(4000)out',@moveout

--備份源資料庫set@s=n'backupdatabase'+quotename(@sdbname)+n'todisk=@bkfilewithformat'execsp_executesql@s,n'@bkfilenvarchar(1000)',@bkfile

--還原為目標資料庫set@s=n'restoredatabase'+quotename(@ddbname)+n'fromdisk=@bkfilewithreplace'+@moveexecsp_executesql@s,n'@bkfilenvarchar(1000)',@bkfile

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

--清理目標資料庫中的所有資料set@s=n'use'+quotename(@ddbname)+n'execsp_msforeachtable@command1=n''truncatetable?'',@whereand=n''andobjectproperty(o.id,n''''tablehasforeignref'''')=0''execsp_msforeachtable@command1=n''deletefrom?'',@whereand=n''andobjectproperty(o.id,n''''tablehasforeignref'''')=1'''execsp_executesql@sgo1

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

處理要求 在sql資料庫裡有乙個名為pos200502的database,每個月會有乙個類似於這樣名稱 pos200502 pos200503 的database 我該如何利用sql server的自動作業 一段儲存過程,實現以下功能 1.每個月的25號,自動建立乙個下乙個月的database,da...

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

處理要求 在sql資料庫裡有乙個名為pos200502的database,每個月會有乙個類似於這樣名稱 pos200502 pos200503 的database 我該如何利用sql server的自動作業 一段儲存過程,實現以下功能 1.每個月的25號,自動建立乙個下乙個月的database,da...

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

建立乙個每月最後乙個工作日執行的作業,呼叫上述儲存過程實現自動建立資料庫 usemastergo 設定sqlagent服務為自動啟動execmsdb.sp set sqlagent properties auto start 1go 建立作業execmsdb.sp add job job name ...