Sql server 2005 更新游标的基本语法

Sql server 2005 更新游标的基本语法,sql-server-2005,cursor,Sql Server 2005,Cursor,好的,我当然熟悉使用只读光标浏览表格,但我似乎找不到实际更新当前行的正确语法联机丛书中似乎都没有显示此简单操作: DECLARE @counter int; SET @counter = 1; DECLARE myCursor CURSOR FOR SELECT RowID, Value FROM myTable FOR UPDATE OF Value; OPEN myCursor; WHILE @counter < 100 FETCH NEXT F

好的,我当然熟悉使用只读光标浏览表格,但我似乎找不到实际更新当前行的正确语法联机丛书中似乎都没有显示此简单操作:

DECLARE @counter int;
SET @counter = 1;
DECLARE myCursor CURSOR FOR
        SELECT RowID, Value FROM myTable
        FOR UPDATE OF Value;
OPEN myCursor;
WHILE @counter < 100
    FETCH NEXT FROM myCursor
    UPDATE myCursor SET Value = @Counter << DOESN'T WORK 
    SET @counter = @counter + 1
END
CLOSE myCursor
DEALLOCATE myCursor
我还试着只设置Value=@计数器,并在获取时使用INTO@值,但似乎也无法使其工作

这显然过于简化了,有更有效的方法来倒计时一列。我不会让你厌烦实际的计算

是的,我确实需要一个游标,而不是整个表上的更新。每个连续行的值将基于一个计算,该计算取决于已写入的前一行

最初在SQL2005上进行测试,但我还需要将代码移植到SQL2000和2008。谢谢

要在当前的位置使用-


这是来自。

好的,这似乎奏效了。这和仅仅从myCursor中提取下一个到@RowID,然后更新myTable SET Value=2,其中RowID=@RowID之间有什么显著区别吗?我很高兴地说,我使用的游标很少,以至于我不知道!:我想这是一个测试案例,有几行,看看计划是什么样子。老实说,我真的无法想象它会有多大的不同,尤其是@RowID是聚集索引键的情况下。除非使用Where-Current语法,否则无法看到游标中底层表的某些更新-请参见MSDN中的。在页面中搜索当前的位置,您将看到详细信息。这不是一个常见的问题。
DECLARE complex_cursor CURSOR FOR
    SELECT a.BusinessEntityID
    FROM HumanResources.EmployeePayHistory AS a
    WHERE RateChangeDate <> 
         (SELECT MAX(RateChangeDate)
          FROM HumanResources.EmployeePayHistory AS b
          WHERE a.BusinessEntityID = b.BusinessEntityID) ;
OPEN complex_cursor;
FETCH FROM complex_cursor;
UPDATE HumanResources.EmployeePayHistory
SET PayFrequency = 2 
WHERE CURRENT OF complex_cursor;
CLOSE complex_cursor;
DEALLOCATE complex_cursor;
GO