簡體   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