【问题标题】:How to create sequential number column index on table with data如何在带有数据的表上创建序号列索引
【发布时间】:2010-10-21 00:07:46
【问题描述】:

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

BookingID, Description
1000       Foo
3000       Bar
1500       Zoo

我需要插入一个名为 ID 的顺序索引,它从 1..x 开始

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

这就是我想要的结果

Id, BookingID, Description
1   1000       Foo
2   3000       Bar
3   1500       Zoo

【问题讨论】:

  • “我需要插入一个名为 ID 的顺序索引”是什么意思。您想向表中添加新列吗?如果是这样,只需在 identity(1,1) 的表中插入一个新列 - 或者该序列是否需要按照 BookingID 的保证顺序?
  • @Martin 在设计器中创建列时我会这样做吗?
  • @Makach- 做什么?我仍然不清楚要求。顺序重要吗?
  • @Martin,不,我不认为顺序很重要
  • @Makach - 当您添加新行时,您希望自动处理序列?

标签: sql sql-server sql-server-2005 tsql migration


【解决方案1】:

这个:

SELECT ROW_NUMBER() OVER(ORDER BY t.bookingid) AS id,
       t.bookingid,
       t.description
  FROM YOUR_TABLE t

...将产生:

id  bookingid   description
----------------------------
1   1000        Foo
2   3000        Bar
3   1500        Zoo

要更新现有的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

【讨论】:

  • 小马,是的,它存在并包含每一行的空值,但我想像你所示的那样用序列号填充字段,但是在 id 行之后我不能在字段上使用标识设置。
  • 谢谢!这正是我想要的。 15000 行迁移成功。
【解决方案2】:

最好改变那个表 ADN 添加一个身份列像

ALTER TABLE TABLENAME 添加 SRNO IDENTITY(1,1)

【讨论】:

    猜你喜欢
    • 2013-01-11
    • 2015-02-10
    • 2020-02-20
    • 1970-01-01
    • 1970-01-01
    • 2011-12-06
    • 1970-01-01
    • 2021-10-15
    • 2011-04-13
    相关资源
    最近更新 更多