Die Bedingungen sollten meiner Meinung nach erfüllt werden:
- der Index auf das Sortierfeld ist eindeutig
- auf die Daten wird auch bei der Änderung über den Index zugegriffen
- die Änderung erfolgt innerhalb einer Transaktion
Ich würde das in einer Stored Procedure kapseln.
Code:
create procedure P_BILDER_VERSCHIEBEN (
SRCINDEX integer,
DSTINDEX integer)
AS
begin
if (srcindex <> dstindex) then
begin
if (srcindex < dstindex) then
begin
update bilder
set idx = -idx
where (idx >= :srcindex) and (idx <= :dstindex);
dstindex = -dstindex;
srcindex = -srcindex;
update bilder
set idx = (-idx) - 1
where (idx >= :dstindex) and (idx < :srcindex);
end
else
begin
update bilder
set idx = -idx
where (idx >= :dstindex) and (idx <= :srcindex);
dstindex = -dstindex;
srcindex = -srcindex;
update bilder
set idx = (-idx) + 1
where (idx > :srcindex) and (idx <= :dstindex);
end
dstindex = -dstindex;
update bilder
set idx = :dstindex
where (idx = :srcindex);
end
end