![](/img/trans.png)
[英]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.