|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
有了rowbase的binlog后,我们来分析一下怎么实现闪回。平时的DML无非三种操作,增删改,先说三种操作的日志格式。server|函数|游标这是网友的成绩,我事先立马给出了本人的办理计划,可是没有想到两头有点小成绩,发明后经由本人细心调试,完整失掉准确了局后,谁人网友已结帖了。我的代码遂成为鸡肋,食之有趣,弃之惋惜。可是我以为我的代码的确仍是挺典范的,以是收拾了一下,供列位网友浏览。成绩:
假定情况以下:
表1:ID,NAME,QQ,PHONE,
表中数据:1秦云1010280013500000
2在路上1037813600000
3LEO1000013900000
表2:ID,NAME,上机工夫,办理员,
表中数据:1秦云2004-1-1李年夜伟
2秦云2005-1-1马化腾
3在路上2005-1-1马化腾
4秦云2005-1-1李年夜伟
5在路上2005-1-1李年夜伟
完成目标:从表1中取一切职员列表,从表2中取上机次数和办理员.
上机职员名单上机次数办理员(上这几回机的每一个办理员都列出来)
秦云3李年夜伟,马化腾,李年夜伟
在路上2马化腾,李年夜伟
LEO0
假如不算办理员那一列的话,我是如许写的。
SELECT表1.NAMEAS姓名,COUNT(表2.ID)AS上机次数
FROM表1LEFTOUTERJOIN
表2ON表1.NAME=表2.NAME
GROUPBY表1.称号
解答:
测试用例
createtable表1(--droptable表1
IDint,
NAMEvarchar(10),
QQvarchar(10),
PHONEvarchar(20)
)
insertinto表1values(1,秦云,10102800,13500000)
insertinto表1values(2,在路上,10378,13600000)
insertinto表1values(3,LEO,10000,13900000)
createtable表2(--droptable表2
IDint,
NAMEvarchar(10),
上机工夫datetime,
办理员varchar(10)
)
insertinto表2values(1,秦云,cast(2004-1-1asdatetime),李年夜伟)
insertinto表2values(2,秦云,cast(2005-1-1asdatetime),马化腾)
insertinto表2values(3,在路上,cast(2005-1-1asdatetime),马化腾)
insertinto表2values(4,秦云,cast(2005-1-1asdatetime),李年夜伟)
insertinto表2values(5,在路上,cast(2005-1-1asdatetime),李年夜伟)
程序部分
createfunctionGetNameStr(@namenvarchar(10))
returnsnvarchar(800)
as
begin
declare@nameStrnvarchar(800)
declare@tempStrnvarchar(800)
declare@flagint
declaremyCurcursorfor(select办理员from表2where表2.NAME=@name)
openmyCur
fetchnextfrommyCurinto@tempStr
set@flag=0
while@@fetch_status=0
begin
if@flag=0
begin
set@nameStr=@tempStr
end
else
begin
set@nameStr=@nameStr+,+@tempStr
end
set@flag=@flag+1
fetchnextfrommyCurinto@tempStr
end
closemyCur
deallocatemyCur
return@nameStr
end
select表2.NAMEas姓名,count(ID)as上机次数,dbo.GetNameStr(表2.NAME)as办理员
from表2
where表2.NAMEin(select表1.NAMEfrom表1)
groupby表2.NAME
测试了局:
姓名上机次数办理员
--------------------------------------------------------------
秦云3李年夜伟,马化腾,李年夜伟
在路上2马化腾,李年夜伟
因此我们的方案中要构造这种逆操作。Event_type增加一种FlashBACK_EVENT。这类操作形式与Query_Event相同,都是简单的SQL语句,只是包含了将数据恢复的操作。 |
|