[英]Creating a Trigger in SQL Server with auto sequence based on multiple fields
[英]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
選項,因為大多數人不會使用它:
筆記:
以下是一些適用於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.