我想在 SQL Server 中创建一个具有最小值和最大值的数字序列。如果数量达到最大限制,我想循环。有谁能够帮我??
Rajesh Kumar
问问题
3579 次
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
选项的快速示例的等价物,因为大多数人不会使用它:
- 在Object Explorer中,展开Programmability文件夹
- 在Programmability文件夹下,右键单击Sequences 文件夹,如下图所示:
- 下划线是您将更新以获得与上述 SQL 语句等效的值,但是,我会考虑根据您的需要更改这些值(请参阅下面的注释)。
笔记:
- 默认起始值、最小值和最大值由数据类型的范围确定,在这种情况下为 int。有关序列和范围的更多信息,请参见此处。
- 相当不错的机会,您希望序列从 1 开始,并且您可能也希望最小值为 1。
于 2016-09-29T15:36:53.420 回答
0
于 2009-12-02T18:27:42.023 回答