查询说明了一切,我没有使用WHILE循环就找不到合适的语法
UPDATE Webtree SET Webtree.Sorting=w2.Sorting
FROM
(
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 w2
WHERE w2.ParentID=@ParentID
)
WHERE Webtree.BranchID=w2.BranchID
答案 0 :(得分:0)
不确定您使用的SQL Server版本 - 如果您使用的是SQL Server 2005或更高版本,则可以尝试使用CTE(公用表表达式):
; 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个月后返回并更改此代码,则自己)...