存储过程中的游标

在SQL里打开一个游标,带有的记录数一般达400-1000条,然后通过这个游标得到的字段值(5-10个).从数据库的其它表中取数据,有时可能要进行计算.然后插入到一个临时表,这样的操作经常耗费大量时间,而且CPU的占用较高(服务器已经是4CPU),造成部分用户无法执行其它ASP的页面.
遇到这样的情况,可以如何优化存储过程.
这些存储过程其实并不复杂.如
declare c1 for
select a,b
from tb1
open ..
fetch into...
while @@FETCH_STATUS=0
begin
select @a=c from tb2 where f1=a and f2=b
select @b=d from tb2 where f3=a and f4=b
...
insert into ##tb3(fa,fb)
values(@a,@b)
Fetch c1 into ...

end
close c1
deallocate c1

一般的结构就这样,只是中间取其它数时的字段更多而已.
但可能由于中间的计算比较多,涉及比较多的计算公式.然后把结果插入到另一个临时表.

[643 byte] By [simson2010-大狗狗] at [2008-1-9]
# 1
花钱找方案
# 2
又没有目标,又没有方法
# 3
不要使用游标,游标的处理性能很差,游标是面向单一记录处理数据的方式。
把你的存储过程改称面向集合的数据处理方式,会提高你的数据库性能的。
smart_zcg at 2007-10-19 > top of Msdn China Tech,MS-SQL Server,应用实例...
# 4
如何面向集合?在哪找资料???
simson2010-大狗狗 at 2007-10-19 > top of Msdn China Tech,MS-SQL Server,应用实例...
# 5
select返回的结果集,尽量把结果集使用一条语句处理掉,这就是面向集合的方法啊
你可以考虑使用子查询、联接等方式处理结果集
smart_zcg at 2007-10-19 > top of Msdn China Tech,MS-SQL Server,应用实例...