仓酷云

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

[学习教程] MSSQL编程:SQL Server 中 自界说函数 和 游标 使用...

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

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

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

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语句,只是包含了将数据恢复的操作。
只想知道 该用户已被删除
沙发
 楼主| 发表于 2015-1-27 17:03:50 | 只看该作者
以前的DTS轻盈简单。但是现在的SSIS虽然功能强大了很多,但是总是让人感觉太麻烦。看看论坛中询问SSIS的贴子就知道。做的功能太强大了,往往会有很多用户不会用了
精灵巫婆 该用户已被删除
板凳
发表于 2015-2-5 09:42:19 | 只看该作者
呵呵,这就是偶想说的
若相依 该用户已被删除
地板
发表于 2015-2-11 08:41:04 | 只看该作者
可以动态传入参数,省却了动态SQL的拼写。
因胸联盟 该用户已被删除
5#
发表于 2015-3-2 04:53:42 | 只看该作者
很多书籍啊,不过个人认为看书太慢,还不如自己学。多做实际的东西,就会遇到很多问题,网上搜下解决问题。不断重复这个过程,在配合sql的F1功能。
活着的死人 该用户已被删除
6#
发表于 2015-3-11 02:14:11 | 只看该作者
再开发调试阶段和OLAP环境中,外键是可以建立的。新版本中加入了SETNULL和SETDEFAULT属性,能够提供能好的级联设置。
7#
发表于 2015-3-17 19:08:30 | 只看该作者
个人感觉没有case直观。而且默认的第三字段(还可能更多)作为groupby字段很容易造成新手的错误。
第二个灵魂 该用户已被删除
8#
发表于 2015-3-17 19:08:30 | 只看该作者
所以你总能得到相应的升级版本,来满足你的需求。
再见西城 该用户已被删除
9#
发表于 2015-3-24 20:44:09 | 只看该作者
还不是性能有问题!否则面向对象的数据库早就实现了!建议使用CLR的地方一般是和应用的复杂程度或操作系统环境有很高的耦合度的场景。如你想构建复杂的算法,并且用到了大量的指针和高级数据模型。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-5-3 19:28

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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