提高效率还是降低效率,要看相对什么来说。
CURSOR能用,但是最好只是在必需的时候用。
CURSOR能用,但是最好只是在必需的时候用。
解决方案 »
- 如何一次性 重建指定数据库中所有表的索引。
- sql如何把字符串插入到dateime类型中
- 如何将datatime(2006-09-08 07:56) 转化为200609080756 ???
- 设计DTS包能用T-SQL实现么?
- 大家谁知道250万条记录的数据库,要列出某一数值型字段没有重复的记录,这样的操作需要时间会很长吗?
- 关于更新TEXT类型字段的超时问题
- 将两个表的记录分别取出前10条联合一下,再取出这里面的前10条,该如何做
- 数据类型:real和float money三者的区别?
- 好急呀~谁能帮我搞定呀?散分
- 我试了下vfp中关于begin transction...roolback的例子.好象没成功.
- 改记录的问题?????
- 请问在transact-sql中能否定义数组
但是SQL Server的處理方式和Oracle完全不同。
游標在SQL Server很耗资源尤其是嵌套的游标,所以尽量少用。而且在T-SQL里很多SQL操作只要多转换些思路是可以代替游标的功能的。
这句话不太对
虽然在Oracle中,游標的概念貫穿整個PL/SQL,
但它与SQLSERVER
的基本处理机制是一样的
我认认为不管什么数据库在用游标前问一下自己
用一条SQl
能不能实现你的功能若能,
就不要用
不得已只好用游标
------------------------------------------------
南方高科 001 2002-07-25 H:\test.vox 广州白云
中脉远红 002 2002-07-26 H:\test.vox 保健产品
深圳科技 003 2002-07-28 H:\HDIAL.VOX NULL
太原煤矿 004 2002-07-28 H:\ARIES.VOX NULL
南京熊猫 005 2002-08-04 H:\ARIES.VOX NULL
北京音像 123 2002-09-18 H:\D100.Vox 注释#%^#我想了一下,似乎不用游标还真的不好写:)以下是我的代码:
----------------------------------------------------- 利用游标写的选取算法(ok),此处必须考虑空表情况
declare @index int, @cpbs int
declare cpbs_cursor scroll cursor for select cpbs from cpjlb --order by cpbs
open cpbs_cursor
set @index=@@cursor_rows
set @cpbs=0
fetch last from cpbs_cursor into @cpbs
while @index>0 and @@fetch_status = 0
begin
if @index<@cpbs
begin
set @index=@index-1
fetch prior from cpbs_cursor into @cpbs
end
else if @index=@cpbs break
end
close cpbs_cursor
deallocate cpbs_cursorgo大家也可以分析一下算法的好坏,然后我有一个问题,不知道在SQLServer中有没有便捷的解决方式,因为CPBS是char(3),但是我的方法出来的是int,这个int可以是1,2,或者3位,当1,2位时如何格式化成char(3),即左边添加0?
------------------------------------------------
南方高科 001 2002-07-25 H:\test.vox 广州白云
中脉远红 002 2002-07-26 H:\test.vox 保健产品
深圳科技 003 2002-07-28 H:\HDIAL.VOX NULL
太原煤矿 004 2002-07-28 H:\ARIES.VOX NULL
南京熊猫 005 2002-08-04 H:\ARIES.VOX NULL太原煤矿 011 2002-07-28 H:\ARIES.VOX NULL
南京熊猫 012 2002-08-04 H:\ARIES.VOX NULL
北京音像 013 2002-09-18 H:\D100.Vox 注释#%^#北京音像 123 2002-09-18 H:\D100.Vox 注释#%^#
看上面的数,按照你的意思应该选出011,按照你的算法选出013
----------------------------------------------
我觉得我的算法还是很严谨的,只是我也有一个问题,就是我想格式化输出字符串,现在有一个整数N,不知道有几位,我需要格式化输出00000N,宽度给定w,也就是C语言中的sprintf(%03d,N)一样的功能,有没有朋友指点一下!
第二次向上一行, 此时index=8 <> cpbs=013 ..............;
第三次........, 此时index=7 <> cpbs=012 ..............;
第四次........, 此时index=6 <> cpbs=011 ..............;
第四次........, 此时index=5 = cpbs=005 满足第一次跳跃,break。