繁体   English   中英

在Sql Server中创建序列

[英]Creating Sequence in Sql Server

我想在SQL Server中创建一个具有最小值和最大值的数字序列。 如果数字达到最大限制,我想循环。 有谁能够帮助我??

不需要while循环。 首先,您需要一个Tally或Numbers表:

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

我只在表格中放了一个100K的数字,但你可能需要更多。 您只需要填充此表一次。现在您可以创建任何您想要的序列。 像这样:

Select Value
From dbo.Numbers
Where Value Between @Start And @End

想要一个增量值?:

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

从SQL Server 2012开始,序列已被添加,并且据称比IDENTITY更快。

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

CREATE SEQUENCE Schema.SequenceName
AS int
INCREMENT BY 1 
CYCLE;

这是从MSDN获取的SQL语法:

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 } ]  
    [ ; ]  

以下是如何在GUI中执行此操作。 这是上面快速示例的等效项, 没有选中CYCLE选项,因为大多数人不会使用它:

  1. 对象资源管理器中 ,展开“ 可编程性”文件夹
  2. Programmability文件夹下,右键单击Sequences文件夹,如下所示:

在此输入图像描述

  1. 带下划线的是您为了获得上述SQL语句的等效而更新的值,但是,我会考虑根据您的需要更改这些值(请参阅下面的注释)。

在此输入图像描述

笔记:

  • 默认的“开始”值,“最小值”和“最大值”由数据类型的范围确定,在这种情况下,该数据类型为int。 有关序列和范围的更多信息,请参见此处
  • 相当不错的机会,你希望你的序列从1开始,你也可能希望你的最小值为1。

以下是一些适用于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

改编自: 汤姆博士的研讨会:生成序列号

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM