我可以将光标的位置重置到开头吗?

时间:2013-06-26 10:34:36

标签: sql-server tsql database-cursor

与主题一样。我可以简单地将光标的位置重置为Transact-SQL中的开头,以便它可以在表上再次运行吗?我想在以下上下文中重置它:

DECLARE @userID INT
DECLARE user_cursor CURSOR FOR SELECT userID FROM users

WHILE /* some condition */
BEGIN
...

    FETCH NEXT FROM user_cursor INTO @userID

    IF @@FETCH_STATUS = 0
    BEGIN
        /*... here goes the reset of the cursor ...*/
    END

...
END

4 个答案:

答案 0 :(得分:28)

你需要将光标声明为滚动,就像这样

declare c scroll cursor for (select statement); 

然后在任何时候定位到第一个只需使用以下

fetch first from c;

答案 1 :(得分:12)

可以使用的另一个不强制你改变光标类型的选项就是close光标并重新open它:

CLOSE user_cursor
OPEN user_cursor

scroll option在资源使用方面会更便宜,如果这是你可以接受的改变。

答案 2 :(得分:1)

光标检索的数据不会改变。

STATIC

定义一个游标,该游标用于生成游标要使用的数据的临时副本。所有对游标的请求都是从tempdb中的临时表中回答的;因此,对基表的修改不会反映在对此游标进行的提取返回的数据中,并且此游标不允许修改。

答案 3 :(得分:-4)

使用游标循环及其照顾...

cursor c_something IS
   select * from somewhere

BEGIN

    for some_row in c_something LOOP
        -- do stuff with some_row.COLUMN;
    END LOOP; -- this closes the cursor for you when it has gone all the way through

    -- do other stuff

    for some_row in c_something LOOP -- opens the cursor again from the top
        -- do stuff with some_row.COLUMN;
    END LOOP;

END;