仓酷云

标题: MSSQL教程之用自界说函数交换SQL中的全角数字为半角... [打印本页]

作者: 透明    时间: 2015-1-16 22:40
标题: MSSQL教程之用自界说函数交换SQL中的全角数字为半角...
上面我们说了DML的闪回方案。但对于DDL却无能为力,对于大多数的DDL,即使是rowbase格式,二进制日志binlog中仍只记录语句本身。对于删表操作,只记录一个语句droptablet。仅凭这句话,无法还原表的数据。函数
在我们利用MSSQL的时分,偶然表中有一些是全角的数字,但我们的体系不克不及够准确的利用它们,这时候我们要把他们交换为半角数字。而SQL本人仿佛没有这个函数。

没有,我们本人下手:

上面就是我本人写的一个函数,固然,我的数据量小,没有思索功能!

--把全角数据转换成半角数字(注重,这个只能转换满是全角的,在第一个半角数据时前往)--公司:石家庄创联科技--编写:牛昆亮QQ:273352165

createfunctionufn_convertWideNumericToAnsi(@vstrInvarchar(1000))returnsvarchar(4000)asbegindeclare@strReturnvarchar(4000),@binvarbinary(4000),@strvarchar(4000),@stmpvarchar(4),@iint,@lenint--,@vstrInvarchar(1000)

--set@vstrIn=031851001845set@strReturn=set@bin=convert(varbinary(4000),@vstrIn)execmaster..xp_varbintohexstr@bin,@stroutselect@str=stuff(@str,1,2,)set@len=len(@str)set@i=1while@i<@lenbeginset@stmp=substring(@str,@i,4)if(substring(@stmp,1,1)A)return@vstrInset@stmp=replace(@stmp,A,)set@stmp=replace(@stmp,B,)--print@stmpset@stmp=cast((convert(int,@stmp)-30)asvarchar(1))set@strReturn=@strReturn+@stmpset@i=@i+4end--print@strReturnreturn@strReturnend

示例

select031851001845asORG,dbo.ufn_convertWideNumericToAnsi(031851001845)DES

ORGDES---------------------------------------------------031851001845031851001845
有了数据以后,我们就要想一个比较统一的方法来闪回。上面我们说了对于DML操作,可以通过反向执行所有逆操作来实现,对于语句里面的DDL,只能直接跳过。原因是一个DDL不一定有直接的逆操作。
作者: 活着的死人    时间: 2015-1-17 21:13
如安全管理、备份恢复、性能监控和调优等,SQL只要熟悉基本操作就可以,只要程序设计部分只要稍加了解即可(如存储过程、触发器等)。
作者: 灵魂腐蚀    时间: 2015-1-21 08:36
对一张百万级别的表建游标,同时又没有什么过滤条件,取得游标效率是如果直接SQL查询百万条数据;如果再对每条记录做处理,耗时将更长。
作者: 变相怪杰    时间: 2015-1-30 12:37
可以动态传入参数,省却了动态SQL的拼写。
作者: 金色的骷髅    时间: 2015-2-16 02:42
数据库物理框架没有变动undo和redo都放在数据库得transaction中,个人感觉是个败笔。如果说我们在设计数据库的时候考虑分多个数据库,可能能在一定程度上避免I/O效率问题。
作者: 蒙在股里    时间: 2015-3-4 23:06
一直以来个人感觉SQLServer的优化器要比Oracle的聪明。SQL2005的更是比2k聪明了不少。(有次作试验发现有的语句在200万级时还比50万级的相同语句要快show_text的一些提示没有找到解释。一直在奇怪。)
作者: 只想知道    时间: 2015-3-11 21:17
记得在最开始使用2k的时候就要用到这个功能,可惜2k没有,现在有了作解决方案的朋友会很高兴吧。
作者: 柔情似水    时间: 2015-3-19 13:40
你可以简单地认为适合的就是好,不适合就是不好。
作者: 仓酷云    时间: 2015-3-28 05:14
但换公司用MSSQL2K感觉自己好像根本就不了解MSSQL。什么DTS触发器以前根本没用过。




欢迎光临 仓酷云 (http://www.ckuyun.com/) Powered by Discuz! X3.2