2012-08-24 9 views
9

Tengo una tabla llamada Site con columnas Name, SiteId y Sequence. Me gustaría llenar el campo Sequence con el número de la planta. He intentado la siguiente consulta, pero simplemente no actualiza los registros:de actualización con CTE y en hilera como números de secuencia o TSQL actualización consulta 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 

¿Qué estoy haciendo mal?

Respuesta

15

puede actualizar el CTE directamente ...

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

Esto funciona de la misma manera que una vista actualizable. Agregué * para asegurarme de que el campo actualizado llega, y luego lo actualicé directamente.

+2

+1 Esta es en realidad la manera de hacerlo –

+0

Wow ... funciona como un encanto. Es mucho más legible No lo sabía –

+0

perfecto, ¡exactamente lo que estaba buscando! –

3

debería unirse a r.SiteID, no 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 
Cuestiones relacionadas