0

我有一个表,其中包含以下列: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
4

1 回答 1

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
于 2013-05-16T09:56:34.153 回答