日期:2014-05-17  浏览次数:20436 次

求 用sql statement取代cursor的問題 急...
不用循環,用什麼方法取代游標,效能會更好,希望各位給個提示,謝謝!!!
------解决方案--------------------
建议你给出具体的例子  这个不好说  有些时候递归可以代替游标的  我最近遇到很多别人写的存储过程 基本上都在用游标  但是很多都可以避免使用游标 改的头晕了
------解决方案--------------------
--贴一个以前关于游标的总结

游标的解决方案基本上都是强制优化器去执行固定的执行计划的,没有基于集合那样优化器会出来很多解决方法然后挑选比较合适的,所以游标要慎用,但确实需要逐条处理的时候,那就不用要用其他方案。
例如存储过程中比较常见的一种做法是数据按照顺序放在一个自增的临时表中,然后用循环来处理,实际上这种做法没有游标的方案好。

注意动态游标的不确定性,动态游标查询的记录集数据如果被修改,会自动刷新游标,这样使得动态游标有了不确定性,因为在多用户环境下,如果其他进程或者本身更改了纪录,就可能刷新游标的记录集。

定义游标时,如果不是特别需要,使用LOCAL关键显式的将游标定义为局部游标,尽量避免使用全局(GLOBAL,这是数据库的默认行为)游标;没有特殊需要的话,尽量使用FORWARD_ONLY READ_ONLY STATIC游标;

------解决方案--------------------
--贴一个以前关于游标的总结

游标的解决方案基本上都是强制优化器去执行固定的执行计划的,没有基于集合那样优化器会出来很多解决方法然后挑选比较合适的,所以游标要慎用,但确实需要逐条处理的时候,那就不用要用其他方案。
例如存储过程中比较常见的一种做法是数据按照顺序放在一个自增的临时表中,然后用循环来处理,实际上这种做法没有游标的方案好。

注意动态游标的不确定性,动态游标查询的记录集数据如果被修改,会自动刷新游标,这样使得动态游标有了不确定性,因为在多用户环境下,如果其他进程或者本身更改了纪录,就可能刷新游标的记录集。

定义游标时,如果不是特别需要,使用LOCAL关键显式的将游标定义为局部游标,尽量避免使用全局(GLOBAL,这是数据库的默认行为)游标;没有特殊需要的话,尽量使用FORWARD_ONLY READ_ONLY STATIC游标;

------解决方案--------------------
我這sp代碼太多,一個sp調用另一個sp,cursor嵌套cursor,我現在就是想問問,有沒有什麼方法的效能比游標好點。
------解决方案--------------------
引用:
我這sp代碼太多,一個sp調用另一個sp,cursor嵌套cursor,我現在就是想問問,有沒有什麼方法的效能比游標好點。


我现在的存储过程也是这样的  烦死了  都不想改了 你得给出你的具体例子 大家看了才好确定用什么方法代替啊  

你不能以为大家跟你一样对你的问题那么了解
------解决方案--------------------
楼上说的对,你给出一个例子看看
------解决方案--------------------
我創建了兩個臨時表,#temptable1和#temptable2
#temptable1添加的是主檔的信息
#temptable2添加的是明細檔的信息
創建cursor1來循環#temptable1
在cursor1中嵌套cursor2,cursor2來循環#temptable2

我需要得出兩個表中的某些字段,想問問有沒有更好的方式來取代游標



------解决方案--------------------
while loop循环可以实现同样的功能


------解决方案--------------------
大部分循环嵌套可以考虑换成CTE来实现,在大数据量的情况下游标和while都有很严重的性能问题。
------解决方案--------------------
比游标好的 就是 C# 代码处理了。