在Sql Server中创建序列

在Sql Server中创建序列,sql,sql-server,sequence,Sql,Sql Server,Sequence,我想在SQL Server中创建一个具有最小值和最大值的数字序列。如果数量达到最大限制,我想循环。任何人都能帮我吗?不需要一段时间。首先,您需要一个理货或数字表: Create Table dbo.Numbers ( Value int not null Primary Key Clustered ) GO With Nums As ( Select Row_Number() Over( Order By S1.object_id ) As Num From sys.co

我想在SQL Server中创建一个具有最小值和最大值的数字序列。如果数量达到最大限制,我想循环。任何人都能帮我吗?

不需要一段时间。首先,您需要一个理货或数字表:

Create Table dbo.Numbers ( Value int not null Primary Key Clustered )
GO
With Nums As
    (
    Select Row_Number() Over( Order By S1.object_id ) As Num
    From sys.columns as s1
        cross join sys.columns as s2
    )
Insert dbo.Numbers( Value )
Select Num
From Nums
Where Num <= 100000
想要增量值吗?:

Select Value
From dbo.Numbers
Where Value % @Increment = 0

下面是一些在SQL 2000中工作的代码:

DECLARE @NumRows int;
SET @NumRows = 10000;
DECLARE @t table (RowNum int not null primary key);

-- Seed
INSERT @t VALUES(1)

WHILE @@ROWCOUNT > 0
BEGIN
    INSERT @t
     SELECT     t.RowNum + x.MaxRowNum FROM @t t
     CROSS JOIN 
     (SELECT    MAX(RowNum) MaxRowNum FROM @t) x
     WHERE      t.RowNum <= @NumRows - x.MaxRowNum
END

改编自此:

自SQL Server 2012起,添加了序列,据说比IDENTITY更快

使用CYCLE选项作为问题请求的快速示例,但大多数人可能不会使用CYCLE,因为他们会将其用于合成主键

CREATE SEQUENCE Schema.SequenceName
AS int
INCREMENT BY 1 
CYCLE;
以下是SQL语法:

下面介绍如何在GUI中执行此操作。这与上面没有选中循环选项的快速示例相同,因为大多数人不会使用该选项:

在对象资源管理器中,展开“可编程性”文件夹 在可编程性文件夹下,右键单击序列 文件夹,如下所示: 下划线是要更新以获取 不过,我将考虑上面SQL语句的等价性。 根据您的需要进行更改,请参见下面的注释。 注:

默认的起始值、最小值和最大值由数据类型的范围确定,在本例中,数据类型是int。 很有可能你希望你的序列从1开始 您可能也希望最小值为1。
1使用一个WHILE循环,2您应该接管它,这一切取决于您计划如何使用序列。到目前为止,所有的答案都做出了一些假设。数字/理货表对于许多功能都非常有用-这一要求可能显得有些过分,但在许多其他地方,您可以找到它们的用途,因此我不会为其他解决方案操心,因为您迟早都会需要此表。此循环将比窗口函数/CTE慢得多,行数越多你需要。
CREATE SEQUENCE Schema.SequenceName
AS int
INCREMENT BY 1 
CYCLE;
CREATE SEQUENCE [schema_name . ] sequence_name  
    [ AS [ built_in_integer_type | user-defined_integer_type ] ]  
    [ START WITH <constant> ]  
    [ INCREMENT BY <constant> ]  
    [ { MINVALUE [ <constant> ] } | { NO MINVALUE } ]  
    [ { MAXVALUE [ <constant> ] } | { NO MAXVALUE } ]  
    [ CYCLE | { NO CYCLE } ]  
    [ { CACHE [ <constant> ] } | { NO CACHE } ]  
    [ ; ]