使用ROW_NUMBER()将CTE和行号更新为序列或TSQL更新查询

Kee*_*ker 9 sql t-sql sql-server-2008

我有一个Site用列命名的表Name,SiteIdSequence.我想Sequence用rownumber 填充这个领域.我尝试了以下查询,但它只是不更新​​记录:

WITH RowNumbers AS 
(
    select   SiteId,
             RowNum = row_number() OVER ( order by SiteId )
    from     [Site] 
)
UPDATE  s
SET     s.[Sequence] = r.RowNum
FROM    [Site] as s INNER JOIN RowNumbers as r ON s.SiteId = r.Row
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?

Mat*_*lie 16

您可以直接更新CTE ...

WITH RowNumbers AS 
(
    select   *,
             RowNum = row_number() OVER ( order by SiteId )
    from     [Site] 
)
UPDATE  RowNumbers
SET     [Sequence] = RowNum
Run Code Online (Sandbox Code Playgroud)

这与可更新视图的工作方式相同.我添加*以确保更新字段通过,然后直接更新.