仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 835|回复: 7
打印 上一主题 下一主题

[学习教程] MSSQL网页编程之依据当月数据库主动天生下个月数据库--...

[复制链接]
小女巫 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-16 22:40:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
提供TCP/IP、ODBC和JDBC等多种数据库连接路径。数据|数据库
/*--原帖地点: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,NIsProcedure)=1)dropprocedure[dbo].[sp_ProcCopyDb]GO

/*--数据库主动复制

将指定前缘的数据库,复制为一个以以后月份+1为库名的数据库中,而且扫除一切的数据比方,数据库前缘为Pos,以后日期为2005-3-27则请求复制数据Pos200503为Pos200504,而且清空内里的数据

用备份+恢复的办法完成优点是在清算数据时,能够设置前提,保存指定的数据欠好的中央是数据多时,速率慢,损耗的资本多

--邹建2005.03(援用请保存此信息)--*/

/*--挪用示例

--复制Posexecsp_ProcCopyDbPos--*/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=Nmasterselect@bkfile=stuff(@bkfile,1,charindex(,@bkfile),N),@bkfile=reverse(stuff(@bkfile,1,charindex(,@bkfile),N))+NBACKUP+cast(newid()asnvarchar(36))+N.bak

--数据文件挪动语句set@s=Nset@move=Nselect@move=@move+N,move+quotename(rtrim(name),N)+Nto+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.sysfilesexecsp_executesql@s,N@moveNvarchar(4000)out,@moveout

--备份源数据库set@s=Nbackupdatabase+quotename(@sdbname)+Ntodisk=@bkfilewithformatexecsp_executesql@s,N@bkfileNvarchar(1000),@bkfile

--复原为方针数据库set@s=Nrestoredatabase+quotename(@ddbname)+Nfromdisk=@bkfilewithreplace+@moveexecsp_executesql@s,N@bkfileNvarchar(1000),@bkfile

--删除一时备份文件set@s=del"+@bkfile+"execmaster..xp_cmdshell@s,no_output

--清算方针数据库中的一切数据set@s=Nuse+quotename(@ddbname)+Nexecsp_msforeachtable@command1=Ntruncatetable?,@whereand=Nandobjectproperty(o.id,NTableHasForeignRef)=0execsp_msforeachtable@command1=Ndeletefrom?,@whereand=Nandobjectproperty(o.id,NTableHasForeignRef)=1execsp_executesql@sgo
有了数据以后,我们就要想一个比较统一的方法来闪回。上面我们说了对于DML操作,可以通过反向执行所有逆操作来实现,对于语句里面的DDL,只能直接跳过。原因是一个DDL不一定有直接的逆操作。
柔情似水 该用户已被删除
沙发
发表于 2015-1-19 21:12:42 | 只看该作者
如果处理少量数据,比如几百条记录的数据,我不知道这两种情况哪个效率更高,如果处理大量数据呢?比如有表中有20万条记录.
金色的骷髅 该用户已被删除
板凳
发表于 2015-1-25 08:02:27 来自手机 | 只看该作者
是要和操作系统进行Socket通讯的场景。否则建议慎重!
简单生活 该用户已被删除
地板
发表于 2015-2-2 16:18:38 | 只看该作者
而写到本地,我又考虑到效率问题.大家来讨论讨论吧,分数不打紧,就给10分,十全十美,没啥对错,各抒己见,但是要有说服力的哦~
5#
发表于 2015-2-8 01:14:55 | 只看该作者
很多书籍啊,不过个人认为看书太慢,还不如自己学。多做实际的东西,就会遇到很多问题,网上搜下解决问题。不断重复这个过程,在配合sql的F1功能。
再见西城 该用户已被删除
6#
发表于 2015-2-23 21:05:32 | 只看该作者
多走走一此相关论坛,多看一些实例开发,多交流0经验,没什么的,我也是刚学没多久!加油
再现理想 该用户已被删除
7#
发表于 2015-3-14 21:20:30 | 只看该作者
语句级快照和事务级快照终于为SQLServer的并发性能带来了突破。个人感觉语句级快照大家应该应用。事务级快照,如果是高并发系统还要慎用。如果一个用户总是被提示修改不成功要求重试时,会杀人的!
海妖 该用户已被删除
8#
发表于 2015-3-21 14:25:53 | 只看该作者
无法深入到数据库系统层面去了解和探究
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-9-27 22:56

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表