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

SQL Server zmienia kolejność numerów sekwencyjnych, gdy rekordy są przesuwane w górę lub w dół

Musisz znać starą pozycję, zanim będziesz mógł przenosić przedmioty. Twoja logika musi być inna w zależności od tego, czy element został przesunięty w górę, czy w dół. Ogólny zarys procesu (nie testowany) jest następujący:

DECLARE @Id INT = 1100000004; -- this id
DECLARE @NewPosition INT = 1; -- needs to have this position

WITH RowToMove AS (
    -- using cte instead of variables
    SELECT Plan_Id, sequence_no AS OldPosition
    FROM planRecords
    WHERE Id = @Id
), RowsToUpdate AS (
    -- columns used inside set and where clause of the update statement
    SELECT Id, sequence_no, OldPosition
    FROM planRecords
    CROSS JOIN RowToMove
    -- select rows that belong to same category and position between old and new
    WHERE planRecords.Plan_Id = RowToMove.Plan_Id AND sequence_no BETWEEN 
        CASE WHEN OldPosition < @NewPosition THEN OldPosition ELSE @NewPosition END AND
        CASE WHEN OldPosition > @NewPosition THEN OldPosition ELSE @NewPosition END
)
UPDATE RowsToUpdate SET sequence_no = CASE
    WHEN Id = @Id THEN @NewPosition -- this is the row we are moving
    WHEN OldPosition < @NewPosition THEN sequence_no - 1 -- row was moved down, move other rows up
    WHEN OldPosition > @NewPosition THEN sequence_no + 1 -- row was moved up, move other rows down
END;

Demo DBFiddle używanie zmiennych , korzystanie z CTE



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. 2 sposoby na zwrócenie listy wyzwalaczy w bazie danych SQL Server przy użyciu T-SQL

  2. Data formatu programu SQL Server DD.MM.RRRR GG:MM:SS

  3. SSRS:powtórz tablix skrajną od lewej wartość grupy wierszy w każdym wierszu

  4. Jak mogę zapytać, które konto Active Directory jest skojarzone z użytkownikiem SQL Server?

  5. Jak mogę iterować po zestawie rekordów w ramach procedury składowanej?