根据当月自动生成下个月数据库--1

<script type="text/javascript"> </script> <script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script>
<script type="text/javascript"> </script><script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script>

/*--原帖地址:http://community.csdn.net/Expert/topic/3818/3818559.xml?temp=.9593317--*/

/*--处理要求

在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(引用请保留此信息)--*/

/*--调用示例

--复制Posexecsp_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@sgo 1 <script type="text/javascript"> </script> <script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script>
<script type="text/javascript"> </script><script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值