【发布时间】:2010-11-03 17:25:13
【问题描述】:
查询作者,
我有一张如下表:
myTable t1
col2 col3
2 1
3 0
4 0
5 0
6 0
我想用前一行中 col3 的值加上当前行中 col2 的值来更新 col3 上的每个零。所以我的表会如下所示:
myTable t1
col2 col3
2 1
3 4 (1+3)
4 8 (4+4)
5 13 (5+8)
6 19 (6+13)
我错过了这里的逻辑,也许是短视。我用光标尝试如下:
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
但这是错误的。 有什么想法吗?
提前致谢。
【问题讨论】:
-
您是否还有其他列,例如桌子上的 ID 列?游标几乎从来都不是一个好主意...
-
其他一些列,但没有主键。这是用于生成报告的临时表。我非常相信游标存在这样的问题。
-
存在此类问题的游标,但这并不意味着它们是最佳/最合适的解决方案。如果您在临时表中添加一个标识列,这将变得容易 10000 倍。
标签: sql sql-server-2005 database-cursor