我有这些表格:
项:
ID (PK)
ItemName
ItemsCategoryLink :
ItemID (FK)
CatID
ItemOrder
对于链接表中的每个CatID
,我可以设置项目的显示顺序。
现在,我想根据ItemOrder
Items.ItemName
这次CTE更新:
;WITH cteUpdate AS
(
SELECT
Items.ItemName,
ItemsCategoryLink.ItemOrder,
ROW_NUMBER() OVER(ORDER BY Items.ItemName DESC) AS NewItemOrder
FROM
Items
INNER JOIN
ItemsCategoryLink ON Items.ID = ItemsCategoryLink.ItemID
WHERE
ItemsCategoryLink.CatID = '{390510E6-765B-4E5D-989F-F13B259FF1D2}'
)
UPDATE cteUpdate
SET ItemOrder = NewItemOrder
令我惊讶的是,这正确地更新了基础ItemsCategoryLink.ItemOrder
。我没有在CTE中选择任何PK。
这是如何运作的?更新CTE如何更新底层表?更新CTE是否依赖于主键,因此它知道要更新哪些行?
请建议。