根据行号更新

时间:2014-06-03 10:30:40

标签: sql sql-server sql-server-2008 sql-update row-number

请考虑此表:

id       Col1         Col2
--------------------------
1        nima         null
18       john         null
25       sara         null

我有一个选择,用于重新记录此记录:

id         Col
---------------
1          LA
2          WA
3          FL

我想以您看到的相同顺序更新上表中的此记录。例如LA的更新nima和...

我怎么能这样做?

感谢

1 个答案:

答案 0 :(得分:5)

您可以根据row_number()进行更新,以及可以在SQL Server中更新common table expressions的事实,如下所示:

with cte1 as (
   select Col2, row_number() over(order by id) as rn
   from Table1
), cte2 as (
   select col, row_number() over(order by id) as rn
   from Table2
)
update c1 set
    Col2 = c2.col
from cte1 as c1
    left outer join cte2 as c2 on c2.rn = c1.rn

<强> sql fiddle demo

请注意,如果您的表很大,性能可能不是很好。如果是这种情况,您可以考虑使用row_number列创建临时表,并使此列成为主键,只需创建适当的索引