如何使用数据在表上创建序列号列索引

Mak*_*ach 3 sql t-sql sql-server migration sql-server-2005

我有下表有10个唯一行,BookingID是一个包含随机数的FK.该数字不需要按顺序排列.

BookingID, Description
1000       Foo
3000       Bar
1500       Zoo
Run Code Online (Sandbox Code Playgroud)

我需要插入一个名为ID的顺序索引,该索引来自1..x

我如何在SQL Server 2005中这样做?我想写一个光标和x = x + 1,但也许有更好的方法?

这是我想要的结果

Id, BookingID, Description
1   1000       Foo
2   3000       Bar
3   1500       Zoo
Run Code Online (Sandbox Code Playgroud)

OMG*_*ies 8

这个:

SELECT ROW_NUMBER() OVER(ORDER BY t.bookingid) AS id,
       t.bookingid,
       t.description
  FROM YOUR_TABLE t
Run Code Online (Sandbox Code Playgroud)

......会产生:

id  bookingid   description
----------------------------
1   1000        Foo
2   3000        Bar
3   1500        Zoo
Run Code Online (Sandbox Code Playgroud)

要更新现有id列,请使用:

WITH cte AS (
   SELECT t.id,
          ROW_NUMBER() OVER(ORDER BY t.bookingid) AS rank,
          t.bookingid,
          t.description
     FROM YOUR_TABLE t)
UPDATE cte
   SET id = rank
Run Code Online (Sandbox Code Playgroud)