【问题标题】:Start position for a reused t- sql cursor?重用 t-sql 游标的起始位置?
【发布时间】:2010-05-26 00:02:13
【问题描述】:

我正在处理一个在临时表上使用游标的存储过程(我已经阅读了一些关于为什么不希望使用游标,但在这种情况下我相信我仍然需要使用游标)。

在我的过程中,我需要遍历表格的行两次。

在声明游标后,已经单步遍历临时表并关闭游标,重新打开时游标的位置是否会保留在表的末尾,还是会重新定位到初始起始位置(即:在第一行之前)?

或者,要重新定位光标,我必须在再次单步执行之前执行“FETCH FIRST”吗?

我是否正确地假设重新定位和重用光标的“成本”比取消分配和重新分配光标要少?

【问题讨论】:

    标签: sql sql-server tsql cursor


    【解决方案1】:

    分配和解除分配的成本微不足道。游标的“坏处”来自于您没有以最佳方式与数据库交互,而不是来自创建或处置游标的任何特定开销。

    我不认为关闭和重新打开光标的位置行为已记录在案,因此您不应依赖它以任何给定方式行事。所以,当你再次开始使用它时,你应该自己重新定位它。

    而且,您正在做的事情可能在没有光标的情况下也是可行的。如果我是你,我会考虑问与此相关的(不同的)问题。 :)

    【讨论】:

    • 谢谢,昨天在寻找我的问题的答案时,我才刚刚发现为什么游标并不总是可取的原因(我是一名应届毕业生,在大学里我们只学过游标.. ) 我计划在发布任何新问题之前多阅读一下,但我确实怀疑我对光标的使用可能会被替换——我只需要先更好地理解替代方案。 :) 尽管如此,我仍然有兴趣在游标完成对记录集的迭代后找出游标的状态。我觉得奇怪的是这还没有被记录在案。
    猜你喜欢
    • 2011-04-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-31
    相关资源
    最近更新 更多