MS SQL Server中的批量增量序列

时间:2017-04-07 20:38:57

标签: sql sql-server

Postgres和Oracle包含generate_series / connect by命令,允许将序列递增1次以上。我需要在行插入之前将序列递增一个可变量。例如在Postgres中,这看起来像下面的查询:

select nextval('mytable_seq') from generate_series(1,3);

在Microsoft SQL Server中实现此目的的推荐方法是什么?

2 个答案:

答案 0 :(得分:3)

您可以使用stored procedure来电。或者,您可以设置某种java.lang.String循环,多次调用while并将其缓存以供日后使用。

答案 1 :(得分:0)

旧问题-新答案:

假设您将序列定义为:

create sequence dbo.IdSequence 
as bigint 
start with 1 

...您可以仅在选择语句中将短语next value for dbo.IdSequence包含为一列。当我有一个序列值时,我想与一个结果集配对,我会做类似的事情:

select
   next value for dbo.IdSequence as Seq,
   someSource.Col1,
   someSource.Col2  --> ... and so on
from
   dbo.someSource

如果需要特定数量的序列值,我将使用某种生成虚值的sql表值函数:

select 
    next value for dbo.IdSequence Seq
from
    dbo.FromTo( 1, 5 )

请注意,如果使两个列从相同的序列中请求值,则它们将为每一列返回相同的值。可能不是您想要的:

select 
    next value for dbo.IdSequence Seq1,
    next value for dbo.IdSequence Seq2
from
    dbo.FromTo( 1, 5 )

...返回类似:

Seq1    Seq2
--------------------------
549     549
550     550
551     551
552     552
553     553

FromTo是一个生成数字的简单函数。在this question的答案(很多)中有很多出色的函数示例。