用TOP代替一般游标

chenxin2835 2008-06-03 06:10:51
没事发个帖,代表我还存活着。
以前弄的用TOP取值来代替一般游标取值的法子,效率如何,没经过测试......有个前提,得有个排序用的列,如ID
Declare @o Bigint,
@n Varchar(256),
@h Int
Set @o=0
Set @n=''
Set @h=0
Select @h=Count(*) From table1
While @h>0
Begin
Set Rowcount @h

Select ID,A,B
Into #temp
From table1
order by ID desc

Select Top 1 @o=A,@n=B
From #temp
order by ID

Set @h=@h-1
Drop Table #temp
Set rowcount 0
End
...全文
48 6 点赞 打赏 收藏 举报
写回复
6 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
chenxin2835 2008-06-04
[Quote=引用 5 楼 DVD_01 的回复:]
有问题,

While ...
Begin
-- 频繁的Into #temp 和Drop Table #temp ,不如把Into #temp部分拿到While外面

End

e.g:

use test
go

Declare @o int,
@n Varchar(256),
@h datetime

If object_id('#') Is Not null
Drop Table #
Select Rid=Identity(int,1,1),Name,WorkDate Into # From DutyHistory
Set @o=@@Rowcount
While @o>0
Begin
Select @n=Name,@h=WorkD…
[/Quote]
学习了,谢谢
  • 打赏
  • 举报
回复
Andy-W 2008-06-03
有问题,

While ...
Begin
-- 频繁的Into #temp 和Drop Table #temp ,不如把Into #temp部分拿到While外面

End

e.g:

use test
go

Declare @o int,
@n Varchar(256),
@h datetime

If object_id('#') Is Not null
Drop Table #
Select Rid=Identity(int,1,1),Name,WorkDate Into # From DutyHistory
Set @o=@@Rowcount
While @o>0
Begin
Select @n=Name,@h=WorkDate From # Where Rid=@o
Select @n,@h --执行语句过程
Set @o=@o-1
End
  • 打赏
  • 举报
回复
hery2002 2008-06-03
o o
  • 打赏
  • 举报
回复
shuhua 2008-06-03
..
  • 打赏
  • 举报
回复
中国风 2008-06-03
..
  • 打赏
  • 举报
回复
liangCK 2008-06-03
jf
  • 打赏
  • 举报
回复
相关推荐
发帖
MS-SQL Server
加入

3.3w+

社区成员

MS-SQL Server相关内容讨论专区
申请成为版主
帖子事件
创建了帖子
2008-06-03 06:10
社区公告
暂无公告