在临时表上创建游标 - 安全吗?

时间:2014-03-06 19:24:18

标签: sql cursor temp-tables

我知道在SQL中创建和使用游标既不安全也不高效,但有时它是唯一的选择。而现在它是我唯一的选择。

我的问题不是如何避免使用游标,而是如果光标仅在存储过程中即时创建的临时表上运行,我将会产生安全性和性能问题。我知道游标运行速度比设置操作慢,并锁定他们正在迭代的表。我的临时表是一个相对较小的表,只包含一个int类型的字段和最多50个记录。

DECLARE @pD int

DECLARE CurDB CURSOR FOR            
SELECT pD FROM #mD
open CurDB
fetch next from CurDB into @pD
etc...

1 个答案:

答案 0 :(得分:3)

是的,这是安全的!和不!游标通常不会锁定它正在迭代的表。 另外,为了获得更好的性能,您可以使用FAST_FORWARD声明游标(如果它们没有更新它正在迭代的表)。

您可以查看有关DECLARE CURSOR

的文档

99.9%的时间你可以用关系逻辑编写一个很好的查询来完成游标可以做的同样的工作,但通常更快并且使用更少的内存。

实际上游标不仅笨拙而且在使用内存方面表现不佳,临时表也会消耗RAM(或者tempdb,可能两者都有)。

性能不仅与时间和CPU周期有关,还与资源有关!