Guest User

Untitled

a guest
Aug 11th, 2012
29
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.29 KB | None | 0 0
  1. SQL Stored Procedure: Reordering rows after delete
  2. DECLARE @TaskID int
  3. DECLARE @SubTaskPosition int
  4.  
  5. DECLARE curSubTaskPositionUpdate cursor fast_forward
  6. FOR
  7. SELECT TaskID, SubTaskPosition
  8. FROM TaskDetails
  9. WHERE SubTaskID = @SubTaskID
  10. OPEN curSubTaskPositionUpdate
  11. FETCH NEXT FROM curSubTaskPositionUpdate INTO @TaskID, @SubTaskPosition
  12. WHILE @@FETCH_STATUS = 0
  13. BEGIN
  14. UPDATE TaskDetails
  15. SET SubTaskPosition = SubTaskPosition - 1
  16. WHERE TaskID = @TaskID
  17. AND SubTaskPosition > @SubTaskPosition
  18.  
  19. FETCH NEXT FROM curSubTaskPositionUpdate INTO @TaskID, @SubTaskPosition
  20. END
  21. CLOSE curSubTaskPositionUpdate
  22. DEALLOCATE curSubTaskPositionUpdate
  23.  
  24. DECLARE @TaskID uniqueidentifier
  25. DECLARE @SubTaskPosition int
  26.  
  27. DECLARE curSubTaskPositionUpdate cursor fast_forward
  28. FOR
  29. SELECT TaskID, SubTaskPosition
  30. FROM TaskDetails
  31. WHERE SubTaskID = @subTaskID
  32. OPEN curSubTaskPositionUpdate
  33. FETCH NEXT FROM curSubTaskPositionUpdate INTO @TaskID, @SubTaskPosition
  34. WHILE @@FETCH_STATUS = 0
  35. BEGIN
  36. -- Delete the subTask
  37. DELETE FROM TaskDetails
  38. WHERE TaskID = @TaskID
  39. AND SubTaskPosition = @SubTaskPosition
  40.  
  41. -- Update the other subTasks
  42. UPDATE TaskDetails
  43. SET SubTaskPosition = SubTaskPosition - 1
  44. WHERE TaskID = @TaskID
  45. AND SubTaskPosition > @SubTaskPosition
  46.  
  47. FETCH NEXT FROM curSubTaskPositionUpdate INTO @TaskID, @SubTaskPosition
  48. END
  49. CLOSE curSubTaskPositionUpdate
  50. DEALLOCATE curSubTaskPositionUpdate
  51.  
  52. UPDATE TaskDetails
  53. SET subTaskPosition = ROW_NUMBER() OVER(PARTITION BY TaskID ORDER BY subTaskPosition)
  54. WHERE TaskID IN( SELECT s.TaskID
  55. FROM TaskDetails s
  56. WHERE SubTaskID = @subTaskID)
  57.  
  58. ;WITH
  59. cteRows As
  60. (
  61. SELECT *,
  62. ROW_NUMBER() OVER(PARTITION BY TaskID ORDER BY subTaskPosition) As NewPosition
  63. FROM TaskDetails
  64. )
  65. UPDATE cteRows
  66. SET subTaskPosition = NewPosition
  67. WHERE TaskID IN( SELECT s.TaskID
  68. FROM TaskDetails s
  69. WHERE SubTaskID = @subTaskID)
  70.  
  71. declare @pos int
  72. select @pos = subTaskPosition from TaskDetails where SubTaskID = @subTaskID
  73. delete ...
  74. delete ...
  75. update TaskDetails set subTaskPosition = subTaskPosition + 1 where SubTaskID = @subTaskID and subTaskPosition > @pos
Advertisement
Add Comment
Please, Sign In to add comment