5

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

4

4 回答 4

2

不需要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
于 2010-02-25T05:51:34.170 回答
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

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

于 2011-08-10T20:25:24.970 回答
1

从 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. Object Explorer中,展开Programmability文件夹
  2. Programmability文件夹下,右键单击Sequences 文件夹,如下图所示:

在此处输入图像描述

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

在此处输入图像描述

笔记:

于 2016-09-29T15:36:53.420 回答
0

在 SQL Server 中模拟序列对象所需的一切。

于 2009-12-02T18:27:42.023 回答