进入“插入选择”的进阶数

时间:2015-07-28 13:31:17

标签: sql sql-server

我有一个存储过程,我在其中执行了多次“insert into select”到同一个表中。在存储过程中,我想为我添加的每条记录添加一个渐进数字,从1开始。 为了说清楚,在我存储的第一个“插入选择”中,我将5条记录添加到我的表中,并且它们将在列中具有渐进数字(1,2 ...,5),在第二个“插入”中选择“我添加其他5条记录,他们应该有渐进式(6,7 ... 10)

P.S。解决方案不应该很重,我可以选择最大当前ID,并在存储开始时与最大ID进行区别,但这会减慢我的程序

1 个答案:

答案 0 :(得分:6)

最简单的解决方案是在您正在创建的表中使用identity列。但是,这并不能保证顺序,但实际上这是正确的想法。

另一种方法是使用row_number()分配序列:

insert into . . .
    select @offset +  row_number() over (order by (select NULL)), . . 
    . . .;

这会产生额外的开销,因为您必须跟踪@offset,以便值正确。这种方法很健壮,因为在表中添加行的另一个线程不会影响您的特定序列号。

我的偏好是第一个解决方案。如果您需要获得没有间隙的序列号,则可以在查询时使用row_number()