У меня есть этот SQL
;WITH Sorted AS (
SELECT authorid,
ROW_NUMBER() OVER (ORDER BY sorted) AS RowNumber
FROM author
WHERE authorid <> @id
)
UPDATE p
SET p.sorted =
(CASE
WHEN p.authorid = @id THEN @id
WHEN s.RowNumber >= @id THEN s.RowNumber + 1
ELSE s.RowNumber
END)
FROM author p
LEFT JOIN Sorted s ON p.authorid = s.authorid
Но этот код проблематичен, потому что я добавляю 1 значение, он работает, если последовательность в порядке, как 1,2,3,4,5.
Но если удалить запись, она испортит все
Поэтому, чтобы преодолеть эту проблему, я подумал, могу ли я использовать столбец primarykey
для того же значения в отсортированном столбце и даже еслиудалить, сортировка должна работать без каких-либо проблем, и приведенный выше код будет сортировать записи должным образом.
Поскольку в какой-то момент только 1 элемент будет отсортирован при перемещении вверх или вниз.
Это больше похоже на обмен строк,
Есть идеи, как мне заставить это работать?
Вот пример данных