sql 在不使用循环的情况下声明一个整数列表
sql declare a list of integers without using loop
要在 sql 中声明整数列表,我们使用以下代码
declare @listOfIDs table (id int);
insert @listOfIDs(id) values(1),(2),(3);
但是我想声明一个从 1 到 n 的长列表。是否可以在不使用循环的情况下在一条命令中完成此操作?
declare @listOfIDs table (id int);
insert @listOfIDs(id) values ????From 1 to n?????
如果你使用sql-server
,那么你可以使用任何table来生成连续的整数(这取决于你的table上有多少行)。
许多人使用 master table master.dbo.spt_values
来生成连续的整数,因为它包含大约 2xxx 行。
如果您使用的是Cross Join
,那么您可以生成 2xxx * 2xxx 行。例如:2000 * 2000 = 4,000,000 行。这意味着你可以生成 4,000,000 个连续整数
declare @listOfIDs table (id int);
insert @listOfIDs(id)
SELECT Top (2000) Row_Number() Over (Order By (Select 1))
FROM master.dbo.spt_values AS s1
CROSS JOIN master.dbo.spt_values AS s2
select * from @listOfIDs
您可以将 Top(2000)
更改为 Top(n)
,其中 n 是最大数量
要在 sql 中声明整数列表,我们使用以下代码
declare @listOfIDs table (id int);
insert @listOfIDs(id) values(1),(2),(3);
但是我想声明一个从 1 到 n 的长列表。是否可以在不使用循环的情况下在一条命令中完成此操作?
declare @listOfIDs table (id int);
insert @listOfIDs(id) values ????From 1 to n?????
如果你使用sql-server
,那么你可以使用任何table来生成连续的整数(这取决于你的table上有多少行)。
许多人使用 master table master.dbo.spt_values
来生成连续的整数,因为它包含大约 2xxx 行。
如果您使用的是Cross Join
,那么您可以生成 2xxx * 2xxx 行。例如:2000 * 2000 = 4,000,000 行。这意味着你可以生成 4,000,000 个连续整数
declare @listOfIDs table (id int);
insert @listOfIDs(id)
SELECT Top (2000) Row_Number() Over (Order By (Select 1))
FROM master.dbo.spt_values AS s1
CROSS JOIN master.dbo.spt_values AS s2
select * from @listOfIDs
您可以将 Top(2000)
更改为 Top(n)
,其中 n 是最大数量