在Sql Server中创建序列
我想在SQL Server中创建一个具有最小值和最大值的数字序列。如果数量达到最大限制,我想循环。任何人都能帮我吗?不需要一段时间。首先,您需要一个理货或数字表:在Sql Server中创建序列,sql,sql-server,sequence,Sql,Sql Server,Sequence,我想在SQL Server中创建一个具有最小值和最大值的数字序列。如果数量达到最大限制,我想循环。任何人都能帮我吗?不需要一段时间。首先,您需要一个理货或数字表: 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.co
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
想要增量值吗?:
Select Value
From dbo.Numbers
Where Value % @Increment = 0
下面是一些在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
改编自此:自SQL Server 2012起,添加了序列,据说比IDENTITY更快 使用CYCLE选项作为问题请求的快速示例,但大多数人可能不会使用CYCLE,因为他们会将其用于合成主键
CREATE SEQUENCE Schema.SequenceName
AS int
INCREMENT BY 1
CYCLE;
以下是SQL语法:
下面介绍如何在GUI中执行此操作。这与上面没有选中循环选项的快速示例相同,因为大多数人不会使用该选项:
在对象资源管理器中,展开“可编程性”文件夹
在可编程性文件夹下,右键单击序列
文件夹,如下所示:
下划线是要更新以获取
不过,我将考虑上面SQL语句的等价性。
根据您的需要进行更改,请参见下面的注释。
注:
默认的起始值、最小值和最大值由数据类型的范围确定,在本例中,数据类型是int。
很有可能你希望你的序列从1开始
您可能也希望最小值为1。
1使用一个WHILE循环,2您应该接管它,这一切取决于您计划如何使用序列。到目前为止,所有的答案都做出了一些假设。数字/理货表对于许多功能都非常有用-这一要求可能显得有些过分,但在许多其他地方,您可以找到它们的用途,因此我不会为其他解决方案操心,因为您迟早都会需要此表。此循环将比窗口函数/CTE慢得多,行数越多你需要。
CREATE SEQUENCE Schema.SequenceName
AS int
INCREMENT BY 1
CYCLE;
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 } ]
[ ; ]