cursor用于更新前一行和当前行中的值的行

Lyn*_*ler 6 sql select sql-server-2005 cursor

查询作家,

我有一张表如下:

myTable t1
col2 col3
 2    1
 3    0
 4    0
 5    0
 6    0
Run Code Online (Sandbox Code Playgroud)

我想更新col3上的每个零,前一行中col3的值加上当前行中col2的值.所以我的表格会如下:

myTable t1
col2 col3
 2    1 
 3    4  (1+3)
 4    8  (4+4)
 5    13 (5+8) 
 6    19 (6+13)
Run Code Online (Sandbox Code Playgroud)

我错过了这里的逻辑,也许是短视.我用光标尝试如下:

DECLARE @var3 FLOAT

DECLARE cursor3 CURSOR FOR
SELECT col2, col3 FROM table1
FOR UPDATE OF col3
OPEN cursor3


FETCH FIRST FROM cursor3
WHILE (@@FETCH_STATUS > -1)
BEGIN
 UPDATE @table1
 SET col3 = isnull(@var3, 0) + isnull(col2, 0)
 WHERE CURRENT OF cursor3
 FETCH NEXT FROM cursor3 INTO @var3
END
Run Code Online (Sandbox Code Playgroud)

但这是错的.有任何想法吗?

提前致谢.

JNK*_*JNK 9

好的,试试这个.

CREATE TABLE MyTable (Id INT Identity, Col2 int, Col3 int)

INSERT INTO MyTable (Col2, Col3)
VALUES (2,1), (3,0), (4,0),(5,0),(6,0)

SELECT * from MyTable

WHILE (SELECT COUNT(*) FROM MyTable WHERE Col3=0) > 0
BEGIN
    UPDATE TOP (1) MyTable
    SET CoL3 = (Mytable.col2 + (select col3 from mytable t2 where (t2.id = mytable.id-1)))
    WHERE Col3 = 0
END

SELECT * from MyTable
Run Code Online (Sandbox Code Playgroud)

WHILE在大多数情况下使用一个比光标快的循环.