Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Verwenden einer Sortierreihenfolgespalte in einer Datenbanktabelle

Update product set order = order+1 where order >= @value changed

Obwohl Sie im Laufe der Zeit immer größere "Leerzeichen" in Ihrer Bestellung erhalten, wird sie dennoch "sortiert"

Dadurch wird 1 zu dem geänderten Wert und jedem Wert danach in einer Anweisung hinzugefügt, aber die obige Aussage ist immer noch wahr. In Ihrer Bestellung bilden sich immer größere "Leerzeichen", die möglicherweise einen INT-Wert überschreiten.

Alternative Lösung bei Wunsch nach Leerzeichen:

Stellen Sie sich eine Prozedur vor für:UpdateSortOrder mit den Parametern @NewOrderVal, @IDToChange, @OriginalOrderVal

Zweistufiger Prozess, je nachdem, ob die neue/alte Bestellung in der Sortierung nach oben oder unten verschoben wird.

If @NewOrderVal < @OriginalOrderVal --Moving down chain 

--Create space for the movement; no point in changing the original 
    Update product set order = order+1 
    where order BETWEEN @NewOrderVal and @OriginalOrderVal-1;

end if

If @NewOrderVal > @OriginalOrderVal --Moving up chain

--Create space  for the momvement; no point in changing the original  
  Update product set order = order-1 
  where order between @OriginalOrderVal+1 and @NewOrderVal
end if

--Finally update the one we moved to correct value

    update product set order = @newOrderVal where [email protected];

In Bezug auf bewährte Verfahren; Die meisten Umgebungen, in denen ich mich befunden habe, möchten normalerweise etwas, das nach Kategorien gruppiert und alphabetisch oder basierend auf "beliebt im Angebot" sortiert ist, wodurch die Notwendigkeit einer benutzerdefinierten Sortierung entfällt.