【发布时间】:2019-05-15 01:21:13
【问题描述】:
已经创建并使用了没有 ID 列的表,但现在需要 ID 列。 (经典)
我听说一切都可以在没有光标的情况下完成。我只需要每一行都包含一个不同的int 值,所以我正在寻找某种行号函数:
即使有这些例子,我也无法确切地知道如何使用它。
UPDATE [TableA]
SET [id] = (select ROW_NUMBER() over (order by id) from [TableA])
子查询返回超过 1 个值。
所以...是的,它当然返回多个值。那么如何混合更新和行号来填充该列?
PS。我不需要精确的顺序,只需要唯一的值。我也想知道 ROW_NUMBER() 在这种情况下是否合适......
【问题讨论】:
-
您需要一个 CTE 或一个子查询才能使用窗口函数
-
为避免另一个经典问题,请使用
BIGINT。我经历了其中的三个崩溃,试图追踪每个引用ID字段的实例,在半夜ID达到2,147,483,648 的压力下。我知道没有人认为它会永远变得那么大。直到它发生。
标签: sql-server pivot row-number