MSSQL编程:SQL Server 中 自界说函数 和 游标 使用...
有了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语句,只是包含了将数据恢复的操作。 以前的DTS轻盈简单。但是现在的SSIS虽然功能强大了很多,但是总是让人感觉太麻烦。看看论坛中询问SSIS的贴子就知道。做的功能太强大了,往往会有很多用户不会用了 呵呵,这就是偶想说的 可以动态传入参数,省却了动态SQL的拼写。 很多书籍啊,不过个人认为看书太慢,还不如自己学。多做实际的东西,就会遇到很多问题,网上搜下解决问题。不断重复这个过程,在配合sql的F1功能。 再开发调试阶段和OLAP环境中,外键是可以建立的。新版本中加入了SETNULL和SETDEFAULT属性,能够提供能好的级联设置。 个人感觉没有case直观。而且默认的第三字段(还可能更多)作为groupby字段很容易造成新手的错误。 所以你总能得到相应的升级版本,来满足你的需求。 还不是性能有问题!否则面向对象的数据库早就实现了!建议使用CLR的地方一般是和应用的复杂程度或操作系统环境有很高的耦合度的场景。如你想构建复杂的算法,并且用到了大量的指针和高级数据模型。
页:
[1]