使用CTE和行号作为序列进行更新,或使用行号()进行TSQL更新查询

使用CTE和行号作为序列进行更新,或使用行号()进行TSQL更新查询,sql,sql-server-2008,tsql,Sql,Sql Server 2008,Tsql,我有一个名为Site的表,其中包含列Name、SiteId和Sequence。我想用行号填充序列字段。我尝试了以下查询,但它只是不更新记录: WITH RowNumbers AS ( select SiteId, RowNum = row_number() OVER ( order by SiteId ) from [Site] ) UPDATE s SET s.[Sequence] = r.RowNum FROM [Si

我有一个名为
Site
的表,其中包含列
Name
SiteId
Sequence
。我想用行号填充
序列
字段。我尝试了以下查询,但它只是不更新记录:

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

我做错了什么?

你应该加入
r.SiteID
,而不是
r.Row

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.SiteID

您可以直接更新CTE

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

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

哇。。。工作起来很有魅力。更具可读性。我不知道。太好了,正是我想要的!