Lets say you have products p01 through p10Like So:orderId: 01 02 03 04 05 06 07 08 09 10prodid: p1 p2 p3 p4 p5 p6 p7 p8 p9 p10and lets say you want to move p9 in between p3 and p4orderId: 01 02 03 04 05 06 07 08 09 10prodid: p1 p2 p3 p9 p4 p5 p6 p7 p8 p10So what you said in SQL was:Declare @myTable table (pId varchar(5), orderId int)Insert Into @myTableSelect 'p01', 1Union Select 'p02', 2Union Select 'p03', 3Union Select 'p04', 4Union Select 'p05', 5Union Select 'p06', 6Union Select 'p07', 7Union Select 'p08', 8Union Select 'p09', 9Union Select 'p10', 10--Select * From @myTableDeclare @movePId varchar(5), @inFrontOfPId varchar(5)Set @movePId = 'p09'Set @inFrontOfPId = 'p04'Select pId, orderId, newOrderId = case when pId = @movePId then (Select orderId From @myTable Where pId = @inFrontOfPId) Else orderId + 1 endFrom @myTable Where orderId between (Select orderId From @myTable Where pId = @inFrontOfPId) and (Select orderId From @myTable Where pId = @movePId)--Use that as an update... and Viola!
Update @myTableSet orderId = case when pId = @movePId then (Select orderId From @myTable Where pId = @inFrontOfPId) Else orderId + 1 endFrom @myTable Where orderId between (Select orderId From @myTable Where pId = @inFrontOfPId) and (Select orderId From @myTable Where pId = @movePId)Select * From @myTable Order By OrderId
Corey