1) Order - очень плохое имя для столбца, так как это ключевое слово SQL
2) Было бы намного лучше, если бы вы могли справляться с пробелами в заказе (и, возможно, переключиться на использованиеfloat, так что вы можете вставить дробные значения), потому что в вашей текущей модели каждая вставка, обновление или удаление может повлиять на всю таблицу.Это плохо масштабируется.Вычисление ордера с использованием ROW_NUMBER()
во время выбора обычно лучше.
3)
create table #PresentationSlide (
PresentationSlideID int not null,
PresentationId int not null,
Content varchar(10) not null,
[Order] int not null
)
insert into #PresentationSlide (PresentationSlideId , PresentationId , Content , [Order])
select 123,3,'bla',1 union all
select 23,3,'bla2',2 union all
select 22,3,'bla3',3 union all
select 100,3,'bla4',4 union all
select 150,3,'bla5',5
delete from #PresentationSlide where PresentationSlideId = 22
;With Reorder as (select PresentationSlideId,ROW_NUMBER() OVER (ORDER BY [Order]) as NewOrder from #PresentationSlide)
update ps set [Order] = NewOrder
from #PresentationSlide ps inner join Reorder r on ps.PresentationSlideId = r.PresentationSlideId
select * from #PresentationSlide order by [Order]
drop table #PresentationSlide