|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
上面我们说了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不一定有直接的逆操作。 |
|