I got an Java application using SQL tables that contains an ordered list of entities, ordered by an order column. I would like to add/remove things in/from the middle of the
If you really want to end up with a continuous sequential order, you can do it like this:
First of all, multiply the sortorder
by say 1000
UPDATE testtable SET sortorder = sortorder * 1000
Now do your inserts and insert suitable sortorder
values to have the new entries in the right place.
Now do a table update and update the values using the ROW_NUMBER function
UPDATE testtable
SET sortorder = subq.newsortorder
FROM
(
SELECT
ID as innerID,
ROW_NUMBER() OVER(ORDER BY sortorder ASC) as newsortorder
FROM testtable
) subq
WHERE subq.innerID = ID
The ID is selected as innerID
as the updated table can't be aliased and the ID column would otherwise end up ambiguous.
This is updating the sortorder
with the row's number when sorted by sortorder
.
My advice is to do two things:
The large increments don't eliminate the problem of doing a large reorder but the need to do a big reorder highly unlikely and the batch job is there to reorder them say once every day/week/month as required.
Changing a whole bunch of items at once is just messy and asking for trouble.