Не уверен, на какой версии SQL Server вы работаете - если вы используете SQL Server 2005 или более позднюю версию, вы можете попробовать использовать CTE (Common Table Expression):
; WITH BaseData AS
(
SELECT
BranchID,
CASE
WHEN @Index >= ROW_NUMBER() OVER(ORDER BY Sorting ASC) THEN ROW_NUMBER() OVER(ORDER BY Sorting ASC)
ELSE ROW_NUMBER() OVER(ORDER BY Sorting ASC)+1
END AS Sorting
FROM Webtree
WHERE ParentID = @ParentID
)
UPDATE Webtree
SET Webtree.Sorting = base.Sorting
FROM BaseData base
WHERE Webtree.BranchID = base.BranchID
Не уверен, откуда взялись эти значения @Index
и @ParentID
- конечно, они должны быть доступны для CTE!
CTE создает нечто вроде «встроенного временного представления», которое доступно только следующему оператору после него. Таким образом, вы часто можете «распутать» два смешанных утверждения и прояснить свое намерение и свои шаги (кому-то еще, читающему код, или себе, если вам придется вернуться и изменить это через 6 месяцев) ...