I would change the structure. It makes no sense. If I had a list of items that were, say, the steps in a process. I would have an OrderBy column. It would go from 1 to whatever the number of steps were. I would then have an instead of trigger that would adjust the order if one of the records was changed. So if I moved Item 6 from being the 8th step to the third step, it would first set item 6 to zero, then adjust every item from 3-7 up one and then make item 6 the third one. I did this for one job a long time ago and it worked well. That way if you have multiple processes with different step orders you can always order them simply by using order by Process, OrderBy in the select. And selecting one process would mean you would just have to use the OrderBY column in the order by clause (with a where clasue to select the process you wanted). The way you are storing data would you could use a cursor to figure out the current order and those are slow and should be avoided. I'd like to thinkthere is a non-cursor based solution to your problem but can't thinkof one offhand. Truly this is design error. It needs to be fixed if you ever expect to get performance out of this system.
"NOTHING is more important in a database than integrity." ESquared