2012-08-24 8 views
9

Ho una tabella denominata Site con colonne Name, SiteId e Sequence. Vorrei riempire il campo Sequence con il numero di riferimento. Ho provato la seguente query, ma semplicemente non aggiorna i record:Aggiornamento con CTE e numeri di riga come sequenza o query di aggiornamento TSQL con 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 

Cosa sto facendo male?

risposta

15

È possibile aggiornare il CTE direttamente ...

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

Questo funziona nello stesso modo di una vista aggiornabile. Ho aggiunto * per garantire che il campo aggiornato venga fornito e quindi aggiornato direttamente.

+2

+1 Questo è in realtà il modo di farlo –

+0

Wow ... funziona come un fascino. È molto più leggibile. Non lo sapevo. –

+0

perfetto, esattamente quello che stavo cercando! –

3

si dovrebbe unirsi a r.SiteID, non 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 
Problemi correlati