2012-08-24 52 views
9

我有一個名爲Site與列NameSiteIdSequence表。我想用rownumber填寫Sequence字段。我試過以下查詢,但它只是不更新​​記錄:更新與CTE和行號作爲序列或TSQL更新查詢與ROW_NUMBER()

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 

我在做什麼錯?

回答

15

您可以直接更新CTE ...

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

此作品以同樣的方式作爲一個可更新視圖。我添加了*以確保更新的字段通過,然後直接進行更新。

+2

+1這實際上就是這樣做的方式 –

+0

哇......像魅力一樣工作。更具可讀性。不知道。 –

+0

完美,正是我所期待的! –

3

你應該加入到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