Infinite loop in CURSOR
Probably you're moving the row when you set Deleted=1
and reading it again with your FAST_FORWARD cursor. Use a STATIC cursor instead, which will iterate a copy of the data, and avoid mutating the data structure you are traversing.
DECLARE st CURSOR LOCAL STATIC FOR . . .
You want WHILE @@FETCH_STATUS = 0
which means continue unless something isn't right.
Using <> -1
means it will continue even if the row fetched was missing, or it's not performing a fetch operation, making it infinite unless you get -1
as a return value, since there are 4 return values for @@FETCH_STATUS
.
0 The FETCH statement was successful.
-1 The FETCH statement failed or the row was beyond the result set.
-2 The row fetched is missing.
-9 The cursor is not performing a fetch operation
.