我对一个游标有一个问题,在某些情况下,它只填充了一个值,而不是直接存在,它一直运行,直到崩溃。
代码如下:
DECLARE @positionID as INT
DECLARE position_cursor CURSOR FOR
SELECT positionUniqueNumber
FROM position
WHERE position.EmployeeID = @EmployeeID
OPEN position_cursor
FETCH NEXT FROM position_cursor INTO @positionID
WHILE @@FETCH_STATUS = 0
BEGIN
UPDATE position
SET positionFromDate = DATEADD(day,@days, positionFromDate)
WHERE position.positionUniqueNumber = @positionID
FETCH NEXT FROM position_cursor INTO @positionID
END
CLOSE position_cursor
DEALLOCATE position_cursor
如果“position\u cursor”只有一个值,我希望光标在一次运行后仍然存在,相反,它会一直运行,直到它试图设置一个高于9999的日期,然后崩溃。我的一个解决方法是检查表中有多少条符合条件的记录,并且仅当有1条以上的记录时才使用游标,但我希望找到更好的方法。思想?谢谢
1条答案
按热度按时间btxsgosb1#
这是一个修复程序。大多数人期望游标具有静态语义,但这不是默认的。如果更新导致行在游标读取的索引中移动,则可以读取同一行两次。
只要始终将游标声明为本地静态,就可以避免这些问题。