Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Korzystanie z kolumny porządku sortowania w tabeli bazy danych

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

Chociaż z biegiem czasu będziesz otrzymywać coraz większe „spacje” w swoim zamówieniu, ale nadal będzie ono „sortować”

Spowoduje to dodanie 1 do zmienianej wartości i każdej wartości następującej po niej w jednej instrukcji, ale powyższe zdanie jest nadal prawdziwe. coraz większe "spacje" będą tworzyć się w twoim zamówieniu, prawdopodobnie dochodząc do punktu przekroczenia wartości INT.

Alternatywne rozwiązanie przy braku spacji:

Wyobraź sobie procedurę dla:UpdateSortOrder z parametrami @NewOrderVal, @IDToChange,@OriginalOrderVal

Proces dwuetapowy, w zależności od tego, czy nowe/stare zamówienie porusza się w górę czy w dół sortowania.

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];

W odniesieniu do najlepszych praktyk; większość środowisk, w których byłem, zazwyczaj chce coś pogrupować według kategorii i posortować alfabetycznie lub na podstawie „popularności w sprzedaży”, co neguje potrzebę zapewnienia sortowania zdefiniowanego przez użytkownika.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Potrzebujesz pomocy w obliczeniach przy użyciu dwóch zestawów danych przy użyciu Expression SSRS

  2. Nie udało się zaktualizować bazy danych .mdf, ponieważ baza danych jest tylko do odczytu (aplikacja Windows)

  3. Moje pole VARCHAR(MAX) ogranicza się do 4000; co daje?

  4. Jak uzyskać wszystkie błędy wszystkich pakietów SSIS w rozwiązaniu?

  5. Jak uzyskać kalendarz kwartał z daty w TSQL?