读书人

求 用sql statement取代cursor的

发布时间: 2012-12-24 10:43:13 作者: rapoo

求 用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# 代码处理了。

读书人网 >SQL Server

热点推荐