我有一个包含以下列的表:ComponentID,PartID,Position,Country和City。主键由ComponentID,PartID,Country和City组成。
我正在使用MS SQL Azure。
潜在的"部分"可能会被删除。如果发生这种情况,我需要能够重置组件和部件的所有位置,但是按国家和城市划分。
我已编写下面的代码,但它会抛出主键错误。有人可以帮忙吗?
-- Update the positions
;WITH CTE AS
(
SELECT Comp.Position,
RowNum = row_number() OVER (partition by Comp.Country, Comp.City order by Comp.Position ASC)
FROM Comp
WHERE Comp.CompID = @selectedComponent
)
UPDATE CTE
SET Position = RowNum
答案 0 :(得分:1)
您的CTE正在为您的数据生成新的行位置,因此您需要将其加入现有表格以更新位置值。
为此,您需要在CTE中包含所有主键列,然后对连接进行更新:
UPDATE dbo.Comp
SET Position = CTE.RowNum
FROM CTE
INNER JOIN DBO.Comp ON CTE.ComponentId = dbo.Comp.ComponentId
AND CTE.City = dbo.Comp.City AND CTE.Country = dbo.Comp.Country AND CTE.PartID = dbo.Comp.PartID