11

我正在使用光标。

DECLARE @column1 NVARCHAR(MAX);

DECLARE cursor_name CURSOR FOR
    SELECT c1
    FROM   table_name;

OPEN cursor_name;
FETCH cursor_name INTO @column1;

WHILE @@FETCH_STATUS = 0
BEGIN

    FETCH cursor_name INTO @column1;
END

CLOSE cursor_name;
DEALLOCATE cursor_name;

现在我的问题是,我可以cursor_name在使用之后更改 cursor 的定义吗?我的意思类似于:

DECLARE cursor_name CURSOR FOR
    SELECT c2
    FROM   table_name2;

使用相同的游标名称cursor_name,但定义已更改。如果这是可能的,如何做到这一点?

谢谢。

4

2 回答 2

12

是的,这是可能的,但必须在您的 DEALLOCATE 之后。你试过这个,它不工作还是什么?

您可能还想看看您是否真的需要光标。它们会损害性能,并且使用它们的 SQL 通常可以在没有它们的情况下被重写。

看看这篇文章,其中介绍了如何做到这一点。他们使用不太常见的 DECLARE/SET 语法来声明游标(至少在我的世界中不常见)。这是他们提供的示例:

USE pubs
GO
DECLARE @MyCursor CURSOR
SET @MyCursor = CURSOR LOCAL SCROLL FOR
SELECT * FROM titles

DEALLOCATE @MyCursor

SET @MyCursor = CURSOR LOCAL SCROLL FOR
SELECT * FROM sales
GO
于 2011-03-01T20:46:42.143 回答
5

避免讨论是否需要游标,从纯技术的角度来看,一旦游标被关闭并释放,您就可以再次自由地重用该名称。

于 2011-03-01T20:45:45.987 回答