In general, applications should attempt to avoid updating
join columns or columns with search clauses and other predicates
to change their value when cursor scans are in progress.
Avoid updates to the join columns of cursors or
to the search arguments of join cursors whenever possible, unless
you are completely sure of the join order.
Use a cursor query that creates a worktable, and
then use searched updates and deletes on the base table. When a
cursor select query requires a worktable, the cursor is always insensitive
to changes to the underlying table. Cursors that include order
by, distinct, group by,
or other clauses that create a worktable cannot be updated with positioned
updates.
If you are using cursors to update both join columns,
consider using searched updates instead of positioned updates. Although
further fetches may return buffered values instead of values that
have been changed in the data rows, use of searched updates avoids
the possibility of failing to fetch matching
rows due to the choice of join order. Searched updates to a clustered
index key in an allpages-locked table implicitly close the cursor.
Note that the ANSI SQL 92 entry-level specification
does not allow updates to join columns using cursors, so the behavior
is implementation-specific. Applications designed to be portable
across different database software must take individual implementations
into account.